Обновление с svn без автоматического слияния

У моего коллеги есть проблемы с тем, как работает обновление svn, но я не уверен, почему, так что этот вопрос имеет две стороны. Во-первых, как решить свою проблему так, как он хочет, и, во-вторых, следует ли мне убедить его, что способ, которым TortoiseSVN делает все это сейчас, - лучший способ (и если да, то как)?

Свой идеальный пример использования

  • Щелкните правой кнопкой мыши- > Обновление SVN
  • SVN извлекает изменения из репозитория, пока файл не изменился в рабочей копии.
  • Если и рабочая копия, и HEAD изменились, он хочет получить подсказку, прежде чем что-нибудь случится, и сделать сам слияние (даже если это сценарий, когда svn легко это выяснит).

Я предполагаю, что это достаточно разумный запрос, но тот факт, что он не хочет доверять SVN, беспокоит меня, хотя это не влияет на меня или мою работу. Он не новичок в управлении версиями, раньше использовал CVS, SVN и ClearCase. Он утверждает, что смог сделать это в svn раньше (также, он на многие годы старше моего).

Ответ 1

Возможно, вы можете убедить его позволить svn внести изменения и просмотреть его перед проверкой?

Я нахожу команду 'svn diff --diff-cmd = kdiff3' полезной именно для этого сценария. Хотя, по общему признанию, это Linux, и ваш синтаксис будет отличаться от TortiseSVN.

Ответ 2

TortoiseSVN Часто задаваемые вопросы: " предотвращает выполнение подрывными процессами автоматических слияний.

edit. Я копирую связанный ответ в FAQ для защиты этого ответа от ссылки rot:

Некоторым людям не нравится тот факт, что Subversion объединяет изменения от других с их собственной местной рабочей копией автоматически изменяется при обновлении. Здесь, как заставить эти файлы конфликтное состояние, чтобы вы могли слиться вручную в удобное для вас время.

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

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

(обратите внимание на двойную обратную косую черту) Создайте файл C:\false.bat, который содержит две строки

@type %9
@exit 1 

Это эффективно приводит к сбою автоматического слияния каждый раз, заставляя файл конфликт.

Причина любопытного type %9что diff3-cmd отправляет объединить вывод в стандартный вывод. диверсия затем берет это и перезаписывает ваши локальный файл с результатами слияния. Добавление этой строки позволяет избежать пустой локальный файл.

Ответ 3

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

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

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

Ответ 4

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

Цитата из описания в странице руководства:

Используйте git stash, когда вы хотите записать текущее состояние работы каталог и индекс, но вернитесь в чистый рабочий каталог.

Ответ 5

Предполагая, что вы не можете убедить своего коллегу передумать, этот поток электронной почты может помочь в принуждении Subversion разрешить ему выполнять все слияние вручную:

http://www.nabble.com/Forcing-conflicts-on-svn-update-to21176148.html#a21176148

Ответ 6

Я думаю, что лучшим решением здесь может быть использование TortoiseSVN клиентских боксов, которые доступны. Вы можете использовать крючок Start-Update или Pre-Update, а в hook script проверить локальную рабочую копию, чтобы увидеть, есть ли какие-либо незафиксированные изменения, и если это так, прервите обновление.

Ответ 7

TortoiseSVN позволяет редактировать файл конфигурации Subversion, поэтому я предполагаю, что этот параметр можно настроить там. Вы можете получить доступ к нему через "Настройки- > Общие" и нажать "Изменить" в групповом ящике subversion в строке "Файл конфигурации Subversion".

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

Ответ 8

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

  • Строка заказа
  • Внесите изменения и протестируйте
  • Отправка рабочей копии во временную ветку
  • Commit (phew, ваши изменения на 100% чисты и полностью безопасны)
  • Переключиться на trunk
  • Восстановить ветвь (это шаг слияния, но ваши изменения безопасны в ветке)
  • Фиксировать
  • Удалить ветку

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

Ответ 9

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

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

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

Ответ 10

Выберите файл, о котором идет речь в Проводнике Windows, затем Shift + щелкните правой кнопкой мыши по файлу, а под TortoiseSVN вы увидите несколько новых параметров, среди которых "Diff with URL" - выберите URL-адрес файла в репозитории и выберите "HEAD revision". Это покажет вашу текущую рабочую копию (которая основана на неглавой ревизии) слева, а правая редакция - справа.

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

Очевидно, это было бы крайне утомительно делать для каждого файла один за другим. Но если это всего лишь один файл с несколькими изменениями, это может сработать. Возможно, если это будет достаточно утомительно, человек будет сдаваться и доверять встроенному алгоритму слияния SVN.

Ответ 11

образование кажется единственным истинным ответом в этом случае