Могу ли я отключить автоматическое слияние в Subversion?

StackOverflow https://stackoverflow.com/questions/53803

  •  09-06-2019
  •  | 
  •  

Вопрос

Мы рассматриваем возможность перехода от стиля извлечения / редактирования / возврата в системе контроля версий к Subversion, и в ходе оценки мы обнаружили, что при выполнении действия обновления в TortoiseSVN (и, предположительно, в любом клиенте Subversion?), Если изменения в репозитории, которые необходимо применить к файлам, которые вы редактировали, не вызывают никаких конфликтов, то они будут автоматически / молча объединены.

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

Очень простой пример:Я работаю в методе C #, меняя некоторую логику во второй части метода, а кто-то другой изменяет значение, на которое инициализируется переменная в начале метода.Изменения другого человека отсутствуют в строках кода, над которыми я работаю, так что конфликта не возникнет;но можно кардинально изменить выходные данные метода.

Мы надеялись, что ситуация будет такова, что если потребуется выполнить слияние, то будут показаны два файла и будет представлена хотя бы простая опция принятия / отклонения изменений, чтобы, по крайней мере, мы знали, что что-то изменилось, и получили возможность посмотреть, влияет ли это на наш код.

Есть ли способ сделать это с помощью Subversion / TortoiseSVN?Или мы слишком сильно увязли в наших нынешних методах работы и должны просто позволить этому делать свое дело...

Это было полезно?

Решение

Лучший способ обойти эту проблему - обучить разработчиков.После того, как вы выполните обновление в TortoiseSVN, оно покажет вам список затронутых файлов.Простой двойной щелчок по каждому файлу покажет вам разницу между ними.Тогда вы сможете увидеть, что изменилось между вашей версией и последней версией репозитория.

Другие советы

Это есть в разделе часто задаваемых вопросов:Как я могу предотвратить автоматическое слияние Subversion?

  1. В TortoiseSVN-> Настройки-> Общие-> Файл конфигурации Subversion нажмите на кнопку изменить.
  2. Измените [helpers] раздел путем добавления

      diff-cmd = "C:\\false.bat"
    

    (обратите внимание на двойную обратную косую черту)

  3. Создайте файл C:\false.bat, содержащий две строки

      @type %9
      @exit 1
    

Вот трюк для TortoiseSVN:

Как отключить “автоматическое слияние” в Subversion

Хитрость для svn.exe заключается в установке svn external diff tool в программу, которая будет постоянно выходить из строя.

svn --diff-cmd=/bin/false

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

Я бы посоветовал вам научиться работать с естественной моделью Subversion, если это вообще возможно.На практике мы обнаруживаем, что конфликты редки, а тип логического конфликта, о котором вы говорите, практически не существует (я не могу вспомнить ни одного случая за последние 4 года в нашем репозитории).

Члены команды должны регистрировать изменения в как можно меньшем масштабе (сохраняя при этом корректность), а не затрачивать целый рабочий день на то, чтобы просто зарегистрировать их один раз.Это уменьшит возможность наступить на чужую работу.

Если вас беспокоит какое-то конкретное изменение, которое вы вносите, Subversion действительно предоставляет запирание механизм, позволяющий предотвратить другие изменения в файле.Смотрите на Красная книга главы, посвященные запирание.

Вот почему автоматизированное (модульное) тестирование является фундаментальной частью разработки распределенного программного обеспечения.В приведенном вами примере по крайней мере один модульный тест должен завершиться сбоем при обновлении svn и предупредить вас об ошибке.

Помните, что такое Subversion:система контроля версий, а не идеально работающий инструмент для объединения кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top