SVN обратное слияние? - PullRequest
       9

SVN обратное слияние?

70 голосов
/ 19 декабря 2009

Мой репозиторий SVN был идеальным в версии 497. Я выполнил несколько неудачных коммитов, так что теперь он находится в ревизии HEAD. Я вижу, что для отката вы должны использовать такую ​​команду:

svn merge -r HEAD:497 .

в рабочем каталоге (рабочий каталог находится в редакции HEAD). Но это правильная команда? Или я использую ГОЛОВКУ: 498? или 496? Я уже выполнил эту команду, и текущая ревизия выглядит не так, как 497, потому что, когда я обновляю -r 497 (или когда у меня есть рабочая копия 497 и я обновляю -r HEAD), происходит много обновлений файлов .

Есть ли у меня какая-то проблема с забором, когда HEAD: 497 фактически превращается в 496, или что-то еще? Или, когда я обновляюсь, SVN проходит через каждую ревизию, несмотря на то, что HEAD и 497 идентичны?

Edit:

Просто чтобы уточнить, как я уже говорил ранее, когда я обновляю между 497 и моим объединенным HEAD, я вижу, что происходит много изменений файла. Я думал, что если бы 497 и HEAD были идентичны, он обнаружил бы это, и никакие изменения файла не произошли бы; было бы просто сказать "Обновлено до версии 497." Так что моя команда неверна, или это неправильное мышление? (и если да, то почему?)

Ответы [ 8 ]

73 голосов
/ 19 декабря 2009

Если ваш репо был в нетронутом состоянии на пересмотре 497, то я думаю, что вы правы, вам нужно сделать:

svn merge -r HEAD:497 .

Эта команда слияния будет изменять только файлы в вашей рабочей копии, поэтому не забудьте также зафиксировать изменения для обновления HEAD в репозитории.

После того, как вы выполните слияние с последующей фиксацией, попробуйте сравнить ревизию 497 с HEAD, и они должны быть идентичны.

22 голосов
/ 19 декабря 2009

Если вы хотите отменить r123, вам нужно svn merge -r 123:122 .

Это означает, что вам нужно запустить

svn merge -r HEAD:497 .

Для проверки запуска:

svn diff -r 497
4 голосов
/ 20 августа 2014

Для тех, кто использует TortiseSVN, вы можете просто вызвать диалог «Показать журнал», отменить коммиты оттуда:

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-howto-rollback.html

4 голосов
/ 19 декабря 2009
1 голос
/ 19 декабря 2009

Чтобы отказаться от нежелательного изменения (возможно, вы зафиксировали другие файлы, в которых содержались операторы отладки, а также что-то, что вы действительно хотели зафиксировать), скажите, что плохое изменение было -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
0 голосов
/ 05 марта 2018

Рассмотрим ГОЛОВУ: 150 вернуть r1 = 100 и r2 = 90

  1. svn up
  2. svn merge -r 100: 99
  3. svn merge -r 90: 89

Примечание: эти изменения не вернутся ВНЕШНЯЯ папка!

0 голосов
/ 11 марта 2012
0 голосов
/ 19 декабря 2009

Если вы хотите быстрый и надежный способ отката к определенной ревизии, просто проверьте более старую ревизию хранилища.

Запустите svn info, чтобы напомнить себе, каков URL вашего репозитория, затем создайте новую папку и извлеките нужную версию:

cd <your new folder>
svn checkout <URL> -r 497 .

Затем вы можете сравнить эту папку с вашей существующей папкой, и вы можете зафиксировать всю ревизию обратно в хранилище оттуда, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...