Niedawno przeszliśmy z SVN na Git i jednocześnie wprowadziliśmy nasze systemy na żywo do kontroli wersji (zamiast lokalnego pobierania i kopiowania plików do życia).
W projekcie, do którego jestem przydzielony, wszyscy uzyskujemy dostęp do tego samego repozytorium i aby wprowadzić zmiany na żywo, właśnie git pull
tam jesteśmy . Powoduje to problemy, ponieważ nasi projektanci pchają zmiany w VCS, które nie powinny być jeszcze aktywne, ale powinny znajdować się w środowisku testowania sieci.
Kiedy jeden z programistów włącza się teraz na żywo, otrzymuje wszystkie (prawdopodobnie niedokończone) zmiany.
Myślałem o przejściu na żywo do dodatkowej gałęzi i po prostu scaliłem to, co się zmieniło, ale z powodu braku wiedzy na temat git nie mam pojęcia, jak to zrobić.
Mój pomysł to:
- Utwórz nowy oddział w live (
git branch live
). - Za każdym razem, gdy coś musi się pojawić
- Wyciągnij zmiany w wzorcu (jak
git checkout master; git pull; git checkout live
:) git merge master
- Wyciągnij zmiany w wzorcu (jak
Problem polega na tym, że przejście na master lub wciągnięcie wszystkiego bezpośrednio do systemu na żywo spowodowałoby problemy, więc wolałbym tego uniknąć.
Czy jest na to jakiś sposób lub istnieje lepszy sposób zarządzania systemem Live (z wyjątkiem szkolenia webbiesów, aby nie wypychały niedokończonych rzeczy).
git pull --all
domyślnie nie uruchomi master na żywo, przeciągnie master i scali go z master, i (jeśli istnieje na serwerze) pull na żywo, aby połączyć się z live. Próbowałeś?git checkout -f
zignoruj problem - ale wykonaj kopię zapasową!Odpowiedzi:
Możesz użyć
git stash
przed sprawdzeniem wzorca i wyciągnięciem, a po ponownym sprawdzeniu na żywo użyjgit stash pop
(lub jeśli twój git jest starszygit stash apply
igit stash clear
zakładając, że nie ukryłeś niczego innego)źródło
git pull --all
pobierze wszystkie piloty, ale nadal będzie próbował połączyć gałąź (lub gałąź domyślną) z bieżącą gałęzią.git fetch --all
może to być lepsza odpowiedź--all
opcji da ci połączenie ośmiornicy różnych wersji gałęzi z prądem ! Więc radzę trzymać się z daleka,--all
chyba że tego właśnie szukasz, ponieważ w większości innych przypadków nic ci to nie da.Byłem w stanie wyciągnąć zmiany z
origin/master
domaster
podczas pracy w innej gałęzi za pomocą tego polecenia:źródło
fetch
! =pull
Najpierw rozwiąż problem. Nie powinni naciskać na oddział, do którego nie mają żadnego interesu.
Wygląda na to, że pytasz
Spowoduje to próbę połączenia zdalnego mistrza i twojej żywej gałęzi.
źródło
Zalecam utworzenie testowego repozytorium git dla każdego do zatwierdzenia. Wszystkie repozytorium, w tym witryna na żywo, będą klonami repozytorium testowego. W ten sposób każdy może przejść do testów bez dotykania strony internetowej na żywo. Gdy ktoś musi zaktualizować witrynę na żywo, możesz pobrać witrynę na żywo z repozytorium testowego git. Ten przepływ pracy jest dość podobny do SVN. Aby uzyskać większą elastyczność, zalecamy użycie opisanej gałęzi „na żywo”.
Podsumowując, repozytorium git każdego jest klonem repozytorium testowego. Witryna produkcyjna na żywo jest także klonem repozytorium testowego. Alternatywnie, testowanie może być klonem żywej produkcji, tak że „popychanie gita” zawsze zmierza w kierunku produkcji.
Inne opcje, w tym dodanie gałęzi „live” do tego układu lub repozytorium „inscenizacji” między testowaniem a produkcją. Dla dodatkowego bezpieczeństwa zalecam ograniczenie dostępu do repozytorium git na żywo i zmuszanie ludzi do korzystania z bezpiecznego skryptu, który uruchamia produkcję na żywo.
źródło