2010-07-29 7 views
6

Moja firma przechodzi na Mercurial i pochodzimy z Subversion.Czy stałe łączenie się z powszechną praktyką Mercurial? Coś nie tak z tym przepływem pracy?

Mamy zauważyć, że jesteśmy konieczności zrobić dużo wtopienie się w naszej pracy. Na przykład, jeśli zmienię plik, zatwierdzam, przeciągam, aktualizuję, pcham, a następnie mój współpracownik zmienia plik, zatwierdza, ściąga i aktualizuje, otrzymuje błąd "przecinające się gałęzie" i musi wykonać scalenie hg. Musimy to robić prawie za każdym razem, gdy chcemy przejść do naszego centralnego repozytorium.

Czy coś nie tak z naszym workflow ?? Wydaje się błędne, że w naszej historii dla danego pliku pojawi się mnóstwo wpisów historii, które mówią "Połączenie z [identyfikator zestawu zmian]" "Połączenie z [identyfikator zestawu zmian]".

Czy to właśnie tak jest? Czy robimy coś złego?

Odpowiedz

4

Nie ma w tym nic złego. Zdecydowana większość połączeń powinna być automatyczna. Ty zrobiłeś stworzyłeś dwie głowy, gdy oboje wprowadziliście zmiany wynikające z tej samej wersji i rozchodzili się w rozbieżnych kierunkach - twoje zmiany mogą, ale nie muszą, powodować konflikt.

Jeśli chcesz wyeliminować zestawy zmian "scalania" (które w rzeczywistości nie są problemem), możesz zmienić/wyciągnąć/zmienić bazę/zatwierdzić/wypchnąć zamiast zmiany/zatwierdzić/wyciągnąć/scalić/zatwierdzić. Innymi słowy, przed wprowadzeniem zmian zmień ich bazę na nową.

+3

Boo za sugerowanie rebase bez ostrzeżenia kogoś, że jest to forma przepisywania historii i ma potencjał dataloss które łączą nigdy nie robi. Przepływy pracy Mercurial obejmują scalenia. –

+1

@ Ry4an: Rebasing przed zatwierdzeniem, które kiedykolwiek zostało upublicznione, nie zmienia historii. Po prostu zmieniasz swoje zmiany i stosujesz je do nowej końcówki zamiast miejsca, w którym pierwotnie dokonałeś modyfikacji. Nic w tym złego. – Borealid

+0

Nie ma ryzyka unieważnienia zdalnych pamięci podręcznych, ale korzysta on z niektórych struktur danych na dysku, które są zwykle dodawane tylko do wstawiania i wstawia je. Jest powód, dla którego jest on domyślnie wyłączony w trybie mercurial - są to polecenia modyfikujące historię. Zapytaj w #mercurial, czy ktoś kiedykolwiek miał awarię bazy i pozostawił repozytorium rozłączone. Warto ostrzec faceta. –

1

Jeżeli scala są wykonywane bez ręcznego rozdzielczości seryjnej, a następnie powiedziałbym mercurial i przepływ pracy zachowują się zgodnie z przeznaczeniem.

+0

Co masz na myśli mówiąc "bez ludzkiej interwencji?" Czy chodzi ci o ręczne rozwiązywanie konfliktów? Czy masz na myśli, że nie musisz iść "hg merge; hg commit", aby dokonać scalenia? –

+0

Miałem na myśli "ręczne rozwiązywanie scalania", ale odpowiedź Borealida jest bardziej kompletna, dlatego go przegłosowałem. Zmieniłem moją odpowiedź, by wyjaśnić, dzięki. – msw

1

Jest powszechne, jak to naprawdę jest konieczne, aby uzyskać repo w stanie spójnym. Jedną rzeczą, która przyspiesza go to zamiast

hg pull; hg update 

użytku fetch

hg fetch 

to inteligentnie zrobić ciągnąć i od każdej aktualizacji lub scalania. Pochodzi z mercurial więc to w zasadzie kwestia edycji .hgrc dodać wiersz tak:

[extensions] 
hgext.fetch= 

Jeśli seryjnej idzie gładko nawet nie zauważy, że dzieje. To była wielka pomoc w moim przepływie pracy.