In un VCS tradizionale, posso capire perché non dovresti commettere file non risolti perché potresti rompere la build. Tuttavia, non capisco perché non dovresti eseguire il commit di file non risolti in un DVCS (alcuni di essi ti impediranno effettivamente di eseguire il commit dei file).
Invece, penso che il tuo repository dovrebbe essere bloccato dallo spingere e tirare , ma non impegnarti.
Essere in grado di impegnarsi durante il processo di fusione ha diversi vantaggi (come lo vedo io):
- Le modifiche effettive all'unione sono nella cronologia.
- Se l'unione era molto ampia, è possibile effettuare commit periodici.
- Se hai commesso un errore, sarebbe molto più semplice ripristinare (senza dover ripetere l'intera unione).
- I file possono rimanere contrassegnati come non risolti fino a quando non vengono contrassegnati come risolti. Ciò impedirebbe di spingere / tirare.
Potresti anche potenzialmente avere un set di changeset che agiscono come unione anziché solo uno. Ciò ti consentirebbe di utilizzare ancora strumenti come git rerere
.
Quindi perché l'impegno con i file non risolti non è visto / prevenuto? C'è qualche motivo diverso dalla tradizione?
hg 1.6
dopo un'unione, i file sono contrassegnati come non risolti. hg
sarà non lasciare che si impegnano fino a quando non li hai contrassegnato come risolto (non significa necessariamente che in realtà si deve risolverli, ma presumo che è l'idea).
hg
mantiene effettivamente un elenco di file che sono stati o non sono stati contrassegnati come "risolti" (usando hg resolve
). Se ci sono U
file in questo elenco, non ti permetterà di impegnarti.
hg resolve
è utilizzato specificamente per le fusioni con conflitti; vedi 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.