Совершает только svn-информацию слияния

Мы объединяем изменения из ствола в ветку. Пока мы это делаем, информация о слиянии записывается.

Поскольку в ветви могут быть другие изменения, существует ли безопасный способ фиксации только тех файлов, которые были затронуты слиянием (при условии, что других изменений нет) вместе со свойствами / информацией слияния?

"Допустим, я хочу слить ревизию" r1 "из транка в ветвь. Я делаю слияние из транка в ветвь для" r1 ". Теперь для" r1 "в папке ветвлений записывается информация о слиянии. Если я сделаю svn diff в ветке, показывает '.' изменил и показывает, что 'r1' является частью свойств слияния. Теперь, как мне зафиксировать измененные файлы только из-за слияния 'r1' вместе со свойствами слияния, которые говорят 'r1'. "

2 ответа

Если вы используете клиенты SVN, такие как TortoiseSVN, при обычном слиянии mergeinfo будет автоматически обновлен как свойство папки корневой папки и отобразит папку с изменением свойства во время фиксации списка файлов.

Если это не происходит автоматически для вашего коммита, то вы можете даже сделать это даже вручную, выполнив следующие действия, если вы используете клиент TortoiseSVN (с предположением root как родитель, mytask как ветвь текущей задачи, subtask как уже слитую обратно ветку из текущей ветки и programs как ваша папка с кодом в каждом брахе):

  1. Щелкните правой кнопкой мыши programs папка на вашей рабочей копии ветки mytask и выберите опцию TortoiseSVN-->Properties,
  2. В новом окне, если у вас уже есть предыдущий mergeinfo затем записывается список svn:mergeinfo со значениями, аналогичными значениям ниже:

    корень / программа:1-489

    корень / задача /mytask/ задачи / подзадачи / программы:380-410

    Затем вы можете сделать следующие шаги:

    a) Выберите опцию Edit ->Advanced в окне, выбрав пункт svn: mergeinfo и обновите mergeinfo, которую вы хотите зафиксировать, нажав "ОК".

  3. В новом окне, если у вас нет предыдущего mergeinfo, тогда вы можете пойти на следующие шаги:

    а) Выберите опцию New-->Advanced,

    б) Выберите svn:mergeinfo из выпадающего списка, добавьте соответствующие mergeinfo в текстовое поле значения и сохранить то же самое.

  4. Сделайте SVN Commmit, нажав на programs папка, и это будет список programs Папка в файлах для фиксации только с изменением свойства, и вы можете зафиксировать это.

С другой стороны

Если вы хотите зафиксировать только объединенные файлы во время слияния из родительской в ​​рабочую копию и оставить локально измененные другие файлы незафиксированными, то прямого пути для этого не существует. Косвенным способом является сохранение двух отдельных рабочих копий (скажем, copy1 и copy2) вашей ветви задач (mytask) и выполните следующие действия:

  1. copy1 имеет все локальные изменения, и вы можете оставить это на некоторое время
  2. SVN оформить новую рабочую копию copy2 вашей ветки.
  3. Объединить изменения от вашего родителя в copy2 и совершить это. Это гарантирует, что вы вносите только объединенные изменения на сервер со всеми mergeinfo ты хочешь.
  4. Тогда иди к своему copy1, выполните обновление SVN, и оно получит новые объединенные изменения с сервера в эту рабочую копию. (Если есть некоторые файлы, которые обновляются во время слияния и изменяются вами также во время локальных изменений, тогда это будет конфликтовать во время этого обновления SVN). Разрешите конфликты, и тогда вы сможете продолжить свои локальные изменения.

Это старая тема, но, поскольку мне тоже нужно было что-то похожее, и я ничего не нашел в stackru, вот мое мнение: используйте 'svn commit --depth=empty folder_with_mergeinfo merged_files'.

В моем случае я объединял две ветви, и если я попытаюсь "svn ci branch", он попытается зафиксировать все, что было изменено в этой ветви. Использование --depth = empty гарантирует, что только информация о слиянии папки и файлы, которые вы хотите зафиксировать.

Другие вопросы по тегам