SVN объединить, добавив параметры. WTF? Или как сделать большие слияния? - PullRequest
1 голос
/ 21 апреля 2010

Я выполняю слияние SVN для ветки, и в одном из файлов я вижу это:

GetQueryReferenceData(int sessionId, Int32 sessionId)

Это означает, что инструмент слияния просто добавил другой параметр, не задавая вопросов. Представьте, что это был вызов Substring (0), а в другой ветви это был бы Substring (0,2). Это совершенно другое поведение, как вообще решить, какой из них выбрать? Хорошо, что это появилось во время компиляции.

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

Что я делаю не так и как делать большие слияния без инструмента слияния, который вносит опасные изменения молча? Существует ли инструмент слияния, не зависящий от языка?

Я использую черепаху SVN.

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Без вопросов может означать разные вещи. Во-первых, вы не изменили этот файл локально или не в определенной области функции, поскольку конфликт мог возникнуть только в том случае, если вы изменили эту же строку. Ни один инструмент не укажет вам на подобные изменения. Или, может быть, вы использовали опцию --accept ... И, конечно, у вас должны быть модульные тесты, чтобы сделать такую ​​ситуацию безопасной. Более того, никакой инструмент контроля версий не справится с этой ситуацией лучше, потому что ни один инструмент контроля версий не зависит от языка. Может быть, было бы неплохо использовать интеграцию IDE и выполнить слияние внутри, возможно, поддержка лучше. И, конечно же, перед тем, как совершать такие действия, вы можете проверить слияние с помощью svn diff (Проверьте наличие изменений).

1 голос
/ 21 апреля 2010

Итак, я не знаком с интерфейсом TortoiseSVN, но в случае конфликта стандартная утилита командной строки Subversion уведомит вас о конфликтах и ​​позволит указать, какую версию («мою», «их») вы хотите установить. использовать или вы предпочитаете разрешать конфликты вручную. Тем не менее, обратите внимание, что если слияние / обновление включало различные разделы кода (чтобы не было конфликта), тогда ожидается поведение, при котором будут применяться любые изменения (будь то изменение подписи или иное). Таким образом, вместо того, чтобы спрашивать, почему SVN объединил запрошенные вами изменения, вы должны спросить, почему ваши разработчики решили изменить подпись в наборе изменений (поскольку SVN не несет ответственности за изменения, внесенные в набор изменений, только за контроль версий этих изменений и для применения этих изменений в рабочем каталоге по запросу).

Кроме того, если вы хотите запретить другим разработчикам извлекать изменения и вносить изменения в код, вы можете создавать различные «ловушки», которые запускаются до или после коммита, чтобы гарантировать компиляцию кода или выполнить любую пользовательскую проверку, которую вы выполняете хотел бы сделать на код и отклонить изменения соответственно.

...