W tradycyjnym VCS rozumiem, dlaczego nie popełniasz nierozwiązanych plików, ponieważ możesz uszkodzić kompilację. Nie rozumiem jednak, dlaczego nie powinieneś zatwierdzać nierozstrzygniętych plików w DVCS (niektóre z nich faktycznie uniemożliwiają zatwierdzenie plików).
Zamiast tego uważam, że twoje repozytorium powinno być zablokowane przed pchaniem i ciągnięciem , ale nie zobowiązując się.
Możliwość zatwierdzenia podczas procesu łączenia ma kilka zalet (jak widzę):
- Rzeczywiste zmiany scalania są w historii.
- Jeśli scalenie było bardzo duże, można było dokonywać okresowych zatwierdzeń.
- Jeśli popełniłeś błąd, znacznie łatwiej byłoby go wycofać (bez konieczności ponawiania całego scalenia).
- Pliki mogą pozostać oznaczone jako nierozwiązane, dopóki nie zostaną oznaczone jako rozwiązane. Zapobiegnie to pchaniu / ciągnięciu.
Możesz również potencjalnie mieć zestaw zmian działający jako scalenie zamiast tylko jednego. To pozwoli ci nadal korzystać z narzędzi takich jak git rerere
.
Dlaczego więc popełnianie niezrozumiałych plików jest marszczone / uniemożliwione? Czy jest jakiś inny powód niż tradycja?
hg 1.6
po scaleniu pliki są oznaczone jako nierozwiązane. hg
będzie nie pozwalają popełnić dopóki nie zaznaczono je jako rozwiązane (niekoniecznie znaczy, że rzeczywiście trzeba je rozwiązać, ale zakładam, że to pomysł).
hg
faktycznie utrzymuje listę plików, które zostały lub nie zostały oznaczone jako „rozwiązane” (za pomocą hg resolve
). Jeśli U
na liście są jakieś pliki, nie pozwoli ci to zatwierdzić.
hg resolve
jest używany specjalnie do łączenia się z konfliktami; patrz selenic.com/mercurial/hg.1.html#resolve . Note that Mercurial will not let you commit files with unresolved merge conflicts. You must use hg resolve -m ... before you can commit after a conflicting merge.