SVN вернуться после слияния
Я сделал svn-слияние между двумя ветвями - не зарегистрировано - и теперь я хочу "слить" некоторые файлы в моей рабочей копии. Что-то вроде следующего:
svn co svn://myserver/repo/branches/foo@1000 foo
cd foo
svn merge svn://myserver/repo/branches/foo@1000 \
svn://myserver/repo/branches/bar@1000
(Примечание: я хочу использовать svn merge
, а не просто скопировать файлы из рабочей копии bar
, потому что (1) есть некоторые законные слияния, т.е. foo
а также bar
(2) некоторые файлы были удалены в bar
и я, когда я регистрируюсь, я хочу удалить их из foo
также.)
Я хочу проверить большинство объединенных файлов, но некоторые из них я хочу выкинуть из изменений bar
ветвь и сохранить существующий файл из foo
ветка. Итак, я стараюсь:
svn revert baz/qux.quux
Это ничего не делает. qux.quux
все еще есть изменения от bar
ветка. я попробую svn status
; это пусто Я пытаюсь скопировать из предстательной копии foo
ветвь: файл теперь имеет правильное содержимое, но svn diff
теперь показывает bar < foo
дифференциалы. svn revert
еще раз: теперь у нас есть bar
меняется обратно. Давай попробуем svn info
:
Path: baz/qux.quux
Name: qux.quux
Working copy root path: /home/mydir/foo
URL: svn://myserver/repo/branches/foo/baz/qux.quux
Repository root: svn://myserver/repo
Repository UUID: [whatever]
Revision: 1000
Node Kind: file
Schedule: normal
Last Changed Author: [author of last change on bar, not foo]
Last Changed Rev: [rev of last change on bar, not foo]
Last Changed Date: [date of last change on bar, not foo]
Так как мне вернуться к foo
версия qux.quux
? И как мне убрать информацию о "плохом" состоянии в моей рабочей копии?
У меня такое чувство, что я в корне недопонимаю svn merge
как-то.
2 ответа
Похоже, что вы хотите объединиться, выбрав черри, что в лучшем случае является взломом в SVN. Вы должны стать экспертом по слиянию SVN, чтобы осуществить это. Другие системы контроля версий (hg, darcs, bzr) поддерживают этот метод разработки better
, но приходят со своими собственными бородавками. Итак, собери свой яд и привыкни к нему.
Дэвид, было ли использование PEG-revision разумным и необходимым решением? Я просто пытаюсь сделать слияние как можно более легким, и прошу вас заново выполнить слияние с новой чистой рабочей копией и показать здесь все, полные реальные команды и вывод (UUID - это не личные данные, URL репо для тестирования может быть файл:///).
Результаты моего теста (объединение головок и возврат одного файла) показывают ожидаемые результаты (вы можете перепроверить его в моем тестовом примере - репозиторий открыт)
- Репозиторий Здравствуйте с некоторой историей: http://mayorat.ursinecorner.ru:8088/svn/Hello/
- Целевой филиал Leichtbau-Deutsch: http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Leichtbau-Deutsch/
- Источник ветки бранш-франсез: http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/branche-francaise/
Шаги и операции
>svn co http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Leichtbau-Deutsch/
A Leichtbau-Deutsch\Hello.en.txt
A Leichtbau-Deutsch\Hello.fr.txt
A Leichtbau-Deutsch\Hello.de.txt
U Leichtbau-Deutsch
Checked out revision 37.
>cd Leichtbau-Deutsch
>svn merge http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/branche-francaise/
--- Merging r26 through r37 into '.':
U Hello.fr.txt
Conflict discovered in 'Z:/Leichtbau-Deutsch/Hello.de.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: tc
U Hello.de.txt
--- Recording mergeinfo for merge of r26 through r37 into '.':
U .
>svn status
M .
M Hello.de.txt
M Hello.fr.txt
>svn revert Hello.fr.txt
Reverted 'Hello.fr.txt'
>svn st
M .
M Hello.de.txt
И ожидаемый результат в конце
PS: я могу повторить этот тест с PEG-ревизиями, если хотите. Но - я предпочитаю использовать реальные ревизии из соответствующих веток и (не связанные с слиянием-возвратом) мне придется выполнять (если память мне хорошо) svn up
(и вслепую объединять), чтобы разветвлять HEAD, прежде чем вы сможете совершить набор слияний, потому что ваш svn co svn://myserver/repo/branches/foo@1000
проверка не-HEAD версия и история изменений в SVN должны быть линейными