Как восстановить ТОЛЬКО каталоги в рабочей копии SVN? - PullRequest
17 голосов
/ 27 января 2011

Я хочу вернуть каталог и все подкаталоги в рабочей копии SVN, чтобы они соответствовали репозиторию, но я не хочу касаться каких-либо файлов внутри этих каталогов.

Одно из моих приложений SVN рекурсивно устанавливает свойство SVN для каждого каталога в моей рабочей копии, но я хочу отменить эти изменения, чтобы остановить его выделение и попытаться зафиксировать изменения в свойствах SVN. Простое изменение в соответствии с заголовком не работает.

Есть идеи? Я прочитал различные ресурсы SVN, но ни один из них, похоже, не имеет отношения к этому крайнему случаю.

Ответы [ 4 ]

105 голосов
/ 28 июня 2012

Работает на всех платформах:

svn revert . --recursive

(Обратите внимание, что это вернет все, а не только каталоги.)

9 голосов
/ 27 января 2011

Вы можете использовать find в сочетании с svn revert:

find . -type d | grep -v .svn | xargs svn revert

Это не затронет файлы внутри каталогов, если вы не используете опцию -R (что эквивалентно --depth=infinity).

2 голосов
/ 27 января 2011

Во-первых, сделайте копию вашей рабочей копии в безопасном месте . :)

Вы можете редактировать свойства в рабочих копиях svn, используя такие команды:

REM Delete all mergeinfo properties recursively
svn propdel svn:mergeinfo -R
1 голос
/ 27 января 2011

В Windows из командной строки вы можете сделать это:

for /d /r %i in (*) do svn revert %i

Если вы вызываете это из пакетного файла, используйте %%i. Сначала выполните резервное копирование!

Эта команда грязная и будет проходить через все каталоги, даже неизмененные или не указанные в svn.Вы можете использовать что-то вроде этого сценария Ruby, чтобы сделать его более понятным способом:

`svn st`.split("\n").grep(/^ M\s+(.*)/) { $1 }.find_all { |i| File.directory? i }.each do |i|
  system "svn revert #{i}"
end
...