Do czasu, gdy będę gotowy ponownie połączyć moją gałąź w celu rozwoju (moje podkreślenie)
Rozwiązywanie konfliktów git merge
jest często łatwiejsze niż w git rebase
. W Git Merge możesz zobaczyć całą listę plików, które zostały zmodyfikowane jednocześnie. Bez względu na to, ile zobowiązań wykonali inni współpracownicy, będziesz musiał połączyć się raz . Dzięki przepływowi pracy w bazie danych może się zdarzać, że ciągle pojawiają się te same konflikty i trzeba je przeglądać ręcznie. Możesz w końcu naprawić 13. zatwierdzenie i czuć, że nie widzisz światła z tunelu .
Z mojego doświadczenia wynika, że gdy próbowałem naiwnie rozwiązywać powtarzające się konflikty bazy, straciłem czyjeś modyfikacje lub aplikację, która nawet się nie skompilowała. Często ja i współpracownicy wykonaliśmy wiele pracy, ale ogarnęło mnie tak duże skomplikowanie powtarzających się konfliktów, że musieliśmy przerwać i stracić naszą poprzednią pracę po kilku zobowiązaniach dotyczących rebase.
Mam zamiar zasugerować kilka technik, ale mogą one tylko ułatwić łączenie niż zautomatyzować zadanie.
- Pliki zasobów / języka . Jeśli masz zmiany addytywne w pliku zasobów, upewnij się, że zawsze przenosisz je na koniec pliku, abyś mógł łatwo przywołać swoje zmiany w porównaniu ze zmianami innych . Możesz skopiować i wkleić zmiany na dole lub po prostu usunąć znaczniki konfliktu
- Zrobić. Nie. ABSOLUTNIE. RE-formatu . Ani Ty, ani Twoi koledzy deweloperzy nie powinni wykonywać „ogromnego formatowania kodu” podczas codziennej pracy. Formatowanie kodu dodaje nadmierną liczbę fałszywych alarmów w zarządzaniu konfliktami. Formatowanie kodu można wykonać
- Stopniowo, np. Przez każdego programistę przy każdym zatwierdzeniu, gdy tylko użyją zautomatyzowanego narzędzia (np. Eclipse ma opcję ponownego sformatowania przy zapisie, waniliowe Visual Studio nie ma żadnego). Absolutnie każdy programista musi stosować te same standardy formatowania kodu, zakodowane w pliku formatu, który jest spożywany przez twoje IDE. Aby dać ci wyobrażenie, jeśli są to 4 spacje lub 2 tabulatory, nie ma to znaczenia, ale naprawdę ma znaczenie, jeśli wszyscy używają tego samego.
- Tuż przed wydaniem przez lidera zespołu. Jeśli zatwierdzenie „formatowania kodu” nastąpi, gdy ludzie nie pracują na gałęziach, tj. Przed rozgałęzieniem, rzeczy będą łatwiejsze
- Przejrzyj podział pracy między współpracowników. Ten jest częścią, z której pochodzi większość inżynierii. Jak wskazują inne odpowiedzi, to zapach projektu, gdy wielu programistów wykonujących różne zadania musi dotknąć tych samych zasobów. Być może będziesz musiał porozmawiać z liderem zespołu o tym, jaką część ma modyfikować każdy współbieżny programista.
Zauważyłem również złe nawyki w przepływach pracy Git w moich zespołach. Często ludzie nadmiernie angażują się w swoje oddziały. Osobiście byłem świadkiem, jak programista dodaje 10 do 20 zatwierdzeń oznaczonych jako „fix”, z których każdy zatwierdza jedną lub dwie linie. Zgodnie z naszymi zasadami zatwierdzenia są oznaczone biletami JIRA, aby dać Ci pomysł.
@JobobRobbins sugeruje wykonanie git rebase
codziennego zadania. Chciałbym przyspieszyć jego podejście.
Najpierw użyj raz bazy, aby zmniejszyć liczbę zatwierdzeń do garstki. I bazuj tylko na oryginalnej gałęzi developerskiej, która jest zatwierdzeniem, z którego rozgałęziłeś się. Kiedy mówię garstkę, mógłbym mieć na myśli 3 lub 4 (np. Cały interfejs, wszystkie zaplecze, wszystkie łatki do baz danych) lub dowolną ludzką rację. Po ich konsolidacji użyj fetch
i przeprowadź rebase w gałęzi upstream. To nie uchroni cię przed konfliktem, chyba że Twój zespół dokona przeglądu własnego podejścia, ale sprawi, że twoje życie będzie mniej bolesne.
Jeśli masz dodatkowe pytania na temat konkretnych zadań, przeszukaj i zapytaj w Stackoverflow.
[Edytuj] na temat zasady braku reformatowania i zwiadowców. Lekko przeformułowałem format RE, aby podkreślić, że mam na myśli zadanie formatowania od zera całego pliku źródłowego, w tym kodu, którego nie dotknąłeś. W przeciwieństwie do tego, aby zawsze formatować własny kod, który jest całkowicie nieprzyzwoity, wielu programistów, w tym ja, jest używanych do przeformatowania całego pliku za pomocą możliwości IDE. Gdy inni dotkną pliku, nawet jeśli zmienione linie i semantyka nie zostaną zmienione, Git uzna go za konflikt. Tylko bardzo potężny edytor rozpoznający język może sugerować, że konflikt dotyczy tylko formatowania i automatycznego scalania najlepiej sformatowanego fragmentu. Ale nie mam dowodów na istnienie takiego narzędzia.
W końcu zasada zwiadowcy nie nakazuje ci sprzątać bałaganu innych ludzi. Tylko twój.