Совершает только svn-информацию слияния
Мы объединяем изменения из ствола в ветку. Пока мы это делаем, информация о слиянии записывается.
Поскольку в ветви могут быть другие изменения, существует ли безопасный способ фиксации только тех файлов, которые были затронуты слиянием (при условии, что других изменений нет) вместе со свойствами / информацией слияния?
"Допустим, я хочу слить ревизию" r1 "из транка в ветвь. Я делаю слияние из транка в ветвь для" r1 ". Теперь для" r1 "в папке ветвлений записывается информация о слиянии. Если я сделаю svn diff в ветке, показывает '.' изменил и показывает, что 'r1' является частью свойств слияния. Теперь, как мне зафиксировать измененные файлы только из-за слияния 'r1' вместе со свойствами слияния, которые говорят 'r1'. "
2 ответа
Если вы используете клиенты SVN, такие как TortoiseSVN, при обычном слиянии mergeinfo
будет автоматически обновлен как свойство папки корневой папки и отобразит папку с изменением свойства во время фиксации списка файлов.
Если это не происходит автоматически для вашего коммита, то вы можете даже сделать это даже вручную, выполнив следующие действия, если вы используете клиент TortoiseSVN (с предположением root
как родитель, mytask
как ветвь текущей задачи, subtask
как уже слитую обратно ветку из текущей ветки и programs
как ваша папка с кодом в каждом брахе):
- Щелкните правой кнопкой мыши
programs
папка на вашей рабочей копии веткиmytask
и выберите опциюTortoiseSVN-->Properties
, В новом окне, если у вас уже есть предыдущий
mergeinfo
затем записывается списокsvn:mergeinfo
со значениями, аналогичными значениям ниже:корень / программа:1-489
корень / задача /mytask/ задачи / подзадачи / программы:380-410
Затем вы можете сделать следующие шаги:
a) Выберите опцию Edit ->Advanced в окне, выбрав пункт svn: mergeinfo и обновите mergeinfo, которую вы хотите зафиксировать, нажав "ОК".
В новом окне, если у вас нет предыдущего
mergeinfo
, тогда вы можете пойти на следующие шаги:а) Выберите опцию
New-->Advanced
,б) Выберите
svn:mergeinfo
из выпадающего списка, добавьте соответствующиеmergeinfo
в текстовое поле значения и сохранить то же самое.- Сделайте SVN Commmit, нажав на
programs
папка, и это будет списокprograms
Папка в файлах для фиксации только с изменением свойства, и вы можете зафиксировать это.
С другой стороны
Если вы хотите зафиксировать только объединенные файлы во время слияния из родительской в рабочую копию и оставить локально измененные другие файлы незафиксированными, то прямого пути для этого не существует. Косвенным способом является сохранение двух отдельных рабочих копий (скажем, copy1 и copy2) вашей ветви задач (mytask
) и выполните следующие действия:
copy1
имеет все локальные изменения, и вы можете оставить это на некоторое время- SVN оформить новую рабочую копию
copy2
вашей ветки. - Объединить изменения от вашего родителя в
copy2
и совершить это. Это гарантирует, что вы вносите только объединенные изменения на сервер со всемиmergeinfo
ты хочешь. - Тогда иди к своему
copy1
, выполните обновление SVN, и оно получит новые объединенные изменения с сервера в эту рабочую копию. (Если есть некоторые файлы, которые обновляются во время слияния и изменяются вами также во время локальных изменений, тогда это будет конфликтовать во время этого обновления SVN). Разрешите конфликты, и тогда вы сможете продолжить свои локальные изменения.
Это старая тема, но, поскольку мне тоже нужно было что-то похожее, и я ничего не нашел в stackru, вот мое мнение: используйте 'svn commit --depth=empty folder_with_mergeinfo merged_files'.
В моем случае я объединял две ветви, и если я попытаюсь "svn ci branch", он попытается зафиксировать все, что было изменено в этой ветви. Использование --depth = empty гарантирует, что только информация о слиянии папки и файлы, которые вы хотите зафиксировать.