Как изменить HEAD на предыдущую ревизию

17

У нас есть ситуация, когда кто-то перепутал Commit с нашим SVN-сервером. Было удалено много файлов и т. Д.

Вопрос: . Какова методика внесения предыдущей (с плохой фиксацией) версии HEAD-версии? Я видел здесь дискуссию о SO, чтобы сделать это для 1 файла, но мы хотели бы сделать так, чтобы последнее завершение никогда не происходило. Любые идеи?

Все эти ответы кажутся правильными. Я отметил ответ абатищева как правильный ответ просто потому, что я использую Tortoise SVN, и это метод, который я фактически использовал.

    
задан jwalkerjr 04.12.2008 в 07:39
источник

5 ответов

9

Может быть, вы можете показать журнал, проверить предыдущую ревизию (n-1), в контекстном меню выбрать «Вернуть к этой ревизии и зафиксировать изменения (она станет n + 1, где n - текущая плохая голова)

    
ответ дан abatishchev 04.12.2008 в 07:50
  • stackoverflow.com/questions/217190/... –  Milen A. Radev 04.12.2008 в 13:39
  • Это не сработало для меня. Когда я вернул свои локальные изменения в предыдущую версию и попытался зафиксировать, svn сказал мне, что я не могу зафиксировать, пока я не обновляю свою рабочую копию, какая-то поражает цель: / –  Sinaesthetic 23.10.2013 в 19:34
19

Самый чистый способ - отменить изменения

  

Вы можете использовать svn merge для «отмены» изменения в вашей рабочей копии, а затем скопировать локальную модификацию в репозиторий. Все, что вам нужно сделать, это указать обратную разницу. (Вы можете сделать это, указав --revision 303:302 или эквивалент --change -303 .)

Я понимаю, что это не «делает так, что последнее совершение никогда не происходило» в том смысле, что фиксация все еще является частью истории, но я считаю, что лучше сохранить эту неудачную фиксацию в истории.
Он может включать некоторые незавершенные работы, которые могут быть запрошены / сопоставлены, чтобы легко переделать новую правильную фиксацию.

Даже если:

  • В руководстве SVN (1.5) упоминается будущая команда obliterate , которая выполнит задачу по постоянному удалению информации и
  • укажите svndumpfilter как возможное обходное решение (в том, что оно обеспечивает возможность быстрого и легкого изменения данных этого файла дампа, действуя как фильтр на основе пути).

... Лучше не пытаться скрутить инструмент SCM во что-то, чего он не должен делать в первую очередь.
Историей (наряду с распараллеливанием с ветвлением) являются две основные особенности СКМ.

    
ответ дан VonC 04.12.2008 в 07:47
  • У нас нет проблем с фиксацией, просто хочу обновить HEAD до нужной базы кода. Попробуем попробовать. Благодарю. –  jwalkerjr 04.12.2008 в 07:50
1

Вы можете сделать это, используя svnadmin dump и svnadmin load . Это довольно грубый способ сделать это, но я считаю, что это единственный способ сделать это.

Ответы на этот вопрос могут помочь: Nuking огромный файл в репозитории svn     

ответ дан Greg Hewgill 04.12.2008 в 07:42
  • Это приведет к поломке рабочих копий, которые находятся на главной версии, поскольку они не могут обновляться до версии из версии, о которой репозиторий не знает. –  Bert Huijben 04.12.2008 в 11:00
0

Вы можете svn cp конкретные ревизии, поэтому, если нет промежуточных операций, которые вы хотите сохранить, вы можете svn rm оскорбительный каталог, а затем svn cp в старой версии. См. раздел Peg и Operative Revision книги     

ответ дан tjw 04.12.2008 в 07:53
  • Это не правильно. Правильный способ - сделать обратное слияние, как говорит VonC. –  kauppi 04.12.2008 в 08:07
0

Использование TortoiseSVN, если вы хотите просто увидеть репозиторий в версии до совершения нарушения:

  • Откройте URL-адрес с помощью браузера репозитория TortoiseSVN.
  • Обратите внимание на номер версии этого фиксажа и измените HEAD на этот номер - 1, нажав кнопку в верхней правой части.

    

ответ дан Dio 17.10.2017 в 09:42