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 репо для тестирования может быть файл:///).

Результаты моего теста (объединение головок и возврат одного файла) показывают ожидаемые результаты (вы можете перепроверить его в моем тестовом примере - репозиторий открыт)

Шаги и операции

>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 должны быть линейными

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