Как я могу заставить SVN принимать определенное разрешение для всех бинарных конфликтов, не запрашивая меня для каждого из них? - PullRequest
8 голосов
/ 28 января 2012

При запуске svn up я регулярно сталкиваюсь с этим приглашением:

Conflict discovered in 'lib/somelibrary.so'.
Select: (p) postpone,
        (mf) mine-full, (tf) theirs-full,
        (s) show all options:

Нажатие s раскрывает параметры mc и tc, мой-конфликт и их-конфликт, которые предположительномне принять либо мою версию, либо их версию для всех конфликтов, а не только somelibrary.so.

Однако эти опции не работают.Я получаю это сообщение:

Invalid option; cannot choose based on conflicts in a binary file.

Ответ Эдвина проясняет, что я неправильно понял, как работают mc и tc, но я все еще хочу иметь возможность использовать одинаковое разрешение для каждого файла, которыйконфликты.Есть ли способ заставить svn использовать mf или tf для каждого конфликта без повторного запроса после первого раза?

Ответы [ 2 ]

11 голосов
/ 28 января 2012

Чтобы автоматически разрешать конфликты на svn update, svn switch, svn merge, используйте флаг --accept.

Из SVN Book - svn options :

- принять ДЕЙСТВИЕ
Определяет действие для автоматического разрешения конфликта. Возможные действия: отложить, выполнить основание, заполнить, заполнить, отредактировать и запустить.

Значение каждого действия можно увидеть в спецификации svn resolve :

Вы можете передать следующие аргументы команде --accept в зависимости на желаемое разрешение:

base Выберите файл, который был БАЗОВОЙ ревизией, прежде чем обновлять ваша рабочая копия. То есть файл, который вы проверили перед вами внес последние изменения.

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

mine-full Разрешить все конфликтующие файлы с копиями файлов как они стояли сразу перед тем, как вы запустили svn update.

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

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

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

Также ознакомьтесь с разделом Разрешение любых конфликтов .

Наконец, пример. Чтобы автоматически разрешить все конфликты как mine-full при обновлении, выполните:

$ svn up --resolve mine-full
1 голос
/ 28 января 2012

mc и tc являются опциями слияния, когда рассматриваются только конфликтующие строки, а затем выполняется слияние этих строк из ваших источников (mc) или из «других» источников (tc).

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

Вы можете использовать mf и tf, которые немного отличаются.Вместо того, чтобы заменять только конфликтующие области файла, они заменяют весь файл на (mf) «мою» копию полного файла или (tf) «свою» копию полного файла).

ЕслиВы хотите, чтобы SVN "отключил и принял параметры файла mc / tc", svn отредактировал mime-тип и установил его в текст.Удачи, если это не текстовый файл, скорее всего, вы получите файл, который не соответствует спецификациям любого начального двоичного файла (например, объединение непрерывных разделов двух файлов JPEG не приведет к созданию допустимого файла JPEG).

...