Верно ли в Mercurial (hg), как и в Git, что внесенная вами ревизия может иметь только код, не модифицированный вами?(слияние) - PullRequest
1 голос
/ 02 августа 2010

Похоже, что в SVN, когда вы делаете слияние, вы не будете проверять ревизию. Все ваши "коммиты" должны иметь только код, который вы изменили.

Но в Mercurial это не так. Ваши коммиты "слияния" совершаются вами, но они обычно содержат изменения, сделанные другими людьми. И если эта фиксация вызвала ошибку в автоматизированном тесте, то это может быть «слияние», которое сломало базу кода, а это означает, что другие изменения не сработали с вашей или наоборот? (но другие изменения, возможно, не выявили ошибку, потому что (1) она, возможно, не зашла так далеко в тесте. (2) тест упакован вместе - и если тест 102 занял 1 час, и есть 3 толчка в течение этого часа проверяется только последняя версия, отправленная на печать)

Это то же поведение, что и Git?

Так что вам действительно нужно посмотреть на сам тест, чтобы увидеть, что его вызывает, и исправить его ... но кто должен на это смотреть - вы или член вашей команды?

Первое знакомство с таким поведением кажется странным ...

Ответы [ 2 ]

3 голосов
/ 03 августа 2010

Слияние будет совершено кем бы то ни было. Но вы можете разделить дерево и затем обвинить человека, который вызвал проблему. Кроме того, если у вас есть идеи относительно пары ответственных людей, вы должны попросить их взглянуть на это. Если вы написали свои тесты правильно, они должны дать вам некоторое представление о том, что не так, где. Если их функции не могут быть разрешены для обеих целей, вам придется проявить дипломатичность и принять некоторые решения.

0 голосов
/ 03 августа 2010

Я не совсем понимаю, о чем вы спрашиваете.Когда вы объединяете две линии разработки (выполняете слияние), вы будете создавать коммит слияния , то есть ревизию, представляющую этот акт объединения двух линий истории.В Git и Mercurial такой коммит помнят оба родителя;в Subversion такая ревизия запоминает обе ревизии для всех файлов (если я правильно понимаю).

В большинстве случаев коммит слияния будет создан автоматически ;в Git (и я думаю также в Mercurial) используется трехстороннее слияние, где 3-й пункт (помимо советов обеих слитых линий разработки / веток) является общим предком.Subversion только в последнее время (начиная с версии 1.5, если я правильно помню) хранит информацию, необходимую для расчета базы слияния (без использования сторонних инструментов, таких как SVK или svnmerge).Обратите внимание, что, насколько я понимаю, Subversion объединяет файлы, в то время как Git и Mercurial объединяют редакции в целом.

Иногда автоматическое объединение завершается неудачно, и вам приходится разрешать конфликты вручную , а затем фиксировать завершениеслияниеЭто может произойти в любой системе управления версиями.

Независимо от того, было ли автоматическое слияние успешным или неудачным, сам процесс слияния (коммит слияния в Git и Mercurial) может привести к ошибкам. Возьмем, к примеру, ситуацию, когда одна сторона изменяет соглашение о вызовах для некоторой функции, а другая сторона добавляет другой сайт вызовов со старым API.Автоматическое слияние может завершиться успешно, но слияние приведет к ошибке, даже если обе линии разработки безошибочны.

Тем не менее git bisect может обнаружить, что это был коммит слияния (акт слияния)это привело к ошибке.

...