В традиционной VCS я могу понять, почему вы не будете фиксировать неразрешенные файлы, потому что вы можете сломать сборку. Однако я не понимаю, почему вы не должны фиксировать неразрешенные файлы в DVCS (некоторые из них фактически не позволят вам зафиксировать файлы).
Вместо этого я думаю, что ваш репозиторий должен быть заблокирован от толкания и извлечения , но не для фиксации.
Возможность фиксации в процессе слияния имеет несколько преимуществ (на мой взгляд):
- Фактические изменения слияния находятся в истории.
- Если слияние было очень большим, вы можете делать периодические коммиты.
- Если вы допустили ошибку, было бы намного проще откатиться назад (без необходимости повторного слияния).
- Файлы могут оставаться помеченными как неразрешенные, пока они не будут помечены как разрешенные. Это предотвратит толкание / вытягивание.
Вы также можете иметь набор изменений, которые будут действовать как слияние, а не как один. Это позволит вам по-прежнему использовать такие инструменты, как git rerere
.
Итак, почему фиксация с неразрешенными файлами не одобряется? Есть ли какая-либо причина, кроме традиции?
hg 1.6
после слияния файлы помечаются как неразрешенные. hg
будет не позволит вам совершить , пока вы не пометив их как разрешенные (не обязательно означает , что вы на самом деле должны решать их, но я предположил бы , что это идея).
hg
фактически поддерживает список файлов, которые были или не были помечены как «разрешенные» (использующие hg resolve
). Если U
в этом списке есть какие-либо файлы, он не позволит вам зафиксировать.
hg resolve
используется специально для слияния с конфликтами; см. 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.