SVN обратное слияние?
Мой репозиторий SVN был совершенен в редакции 497. Я выполнил несколько плохих коммитов, так что теперь он находится в редакции HEAD. Я вижу, что для отката вам следует использовать такую команду:
svn merge -r HEAD:497 .
в рабочем каталоге (и рабочий каталог находится в редакции HEAD). Но разве это правильная команда? Или я использую HEAD: 498? или 496? Я уже выполнил эту команду, и текущая версия не совпадает с 497, потому что когда я обновляю -r 497 (или когда у меня есть 497 рабочих копий и я обновляю -r HEAD), происходит множество обновлений файлов.
У меня есть какая-то проблема с fencepost, где HEAD: 497 действительно возвращается к 496 или что-то еще? Или это, когда я обновляюсь, SVN возвращается через каждую ревизию, несмотря на то, что HEAD и 497 идентичны?
Edit:
Просто, чтобы уточнить, как я сказал ранее, когда я обновляю между 497 и моим объединенным HEAD, я вижу, что происходит большое количество изменений файла. Я думал, что если 497 и HEAD будут идентичными, это обнаружит это, и никаких изменений файла не произойдет; он просто сказал бы: "Обновлено до версии 497." Так ошибочна моя команда или это неправильно? (и если да, то почему?)
Ответы
Ответ 1
Если ваше репо было в первозданном состоянии при ревизии 497, тогда я думаю, что вы правы, вам нужно сделать:
svn merge -r HEAD:497 .
Эта команда объединения только изменит файлы в вашей рабочей копии, поэтому не забудьте также зафиксировать изменения для обновления HEAD в репо.
После того, как вы выполните слияние, за которым следует коммит, попробуйте сравнить ревизию 497 с HEAD, и они должны быть идентичными.
Ответ 2
Если вы хотите отменить r123, вам нужно svn merge -r 123:122 .
Это означает, что вам нужно запустить
svn merge -r HEAD:497 .
Чтобы проверить запуск:
svn diff -r 497
Ответ 3
Помогает ли это?
http://svnbook.red-bean.com/en/1.1/ch04s04.html#svn-ch-4-sect-4.2
Ответ 4
Для тех, кто использует TortiseSVN, вы можете просто открыть диалоговое окно "Показать журнал":
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-howto-rollback.html
Ответ 5
Чтобы избежать нежелательного изменения (возможно, вы передали другие файлы, в которых были отладочные заявления, вместе с тем, что вы действительно хотели совершить), скажем, что неправильное изменение было -r10:
svn update
svn merge -r10:9 <URL of your repository base> .
Теперь вы можете вернуть только тот файл, который вы хотите совершить:
svn update
svn update -r10
svn commit <just that one file> # this is the command you meant to type from the beginning
Ответ 6
Если вам нужен быстрый и надежный способ откат к определенной ревизии, просто проверьте прежнюю версию репозитория.
Запустите svn info
, чтобы напомнить себе, что такое URL вашего репозитория, затем создайте новую папку и проверьте нужный вариант:
cd <your new folder>
svn checkout <URL> -r 497 .
Затем вы можете разделить эту папку с существующей папкой, и после этого вы можете скопировать всю эту ревизию обратно в репозиторий, если вам нужно.
Ответ 7
Вам нужно это http://phpcollection.com/revert-files-to-older-svn-version/