Подделка глубины оформления SVN - PullRequest
7 голосов
/ 03 октября 2011

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

Я хочу не делать этого в этом случае, потому что репо содержит тысячи больших изображений, а проверка занимает много времени.Так что я хочу сделать не полностью рекурсивную проверку в новом каталоге, скопировать мои существующие файлы в новый каталог, а затем проверить все целиком.из нескольких файлов.Есть ли способ, которым я могу подделать это и заставить SVN думать, что я только что сделал полную проверку?(например, как я могу получить только папку .svn для полной проверки без фактической проверки всего)

Ответы [ 4 ]

3 голосов
/ 25 октября 2011

Разреженная проверка вашего хранилища в новом месте должна делать то, что вы хотите (http://svnbook.red -bean.com / ru / 1.5 / svn.advanced.sparsedirs.html ). Если я вас правильно понимаю, вы захотите выполнить пустую проверку самого верхнего каталога, а затем выполнить svn up только для тех артефактов, которые хотите, задавая глубину по мере продвижения.

Например, допустим, у меня есть папка верхнего уровня с именем 'foo', и она содержит две папки, 'bar' и 'zoog'.

/foo
  /bar
    -the files I want
  /zoog
    -the universe

В папке 'zoog' находится большое количество файлов, которые мне сейчас не нужны, но я хочу иметь возможность работать с 'bar'. Я бы сделал следующее:

svn co --depth empty file:///var/svn/repos/FooRepo foo
cd foo
svn up --set-depth infinity bar

Теперь 'svn up' показывает, что все обновлено, и я могу вносить изменения в 'foo' и 'bar' и фиксировать их, как будто я также извлек 'zoog' без всех накладных расходов.

(Аргументы --set-глубина в обновлении svn: исключение, пусто, файлы, немедленное выполнение и бесконечность)

1 голос
/ 03 октября 2011

Скорее всего, вы повредили или удалили скрытую папку .svn внутри каждой проверки.

Используйте командную строку, чтобы сделать svn co svn://your/svn/repository --depth immediates в другом месте и восстановить папку .svn оттуда.Затем вам нужно будет пройти через множество последовательностей svn update . и svn cleanup, чтобы заново связать подпапки с родительской папкой.

0 голосов
/ 24 октября 2011

Если поврежден только корень рабочей копии и большие (или многие файлы) находятся в каталогах ниже корня рабочей копии, следующая процедура должна работать без повторной загрузки файлов из репозитория:

> # 1) adjust these:
> WC=/bad/root/of/working/copy
> REPO=svn://localhost/url/to/repo/trunk/proj

> cd $WC
> # 2) make sure there is no half-baked stuff
> rm -rf .svn

> # 3) remove files in WC-root (would wreck havok later)
> rm -v $(svn ls --depth=files $REPO)

> # 4) ckeck out a clean .svn for this dir into another place
> svn co --depth=immediates $REPO /tmp/tmp-wc
> # 5) copy .svn this to this place
> cp -a /tmp/tmp-wc .

> # 6) "reconnect" children, download files in root
> svn up --set-depth=infinity .
Revision 42.

После этого должна быть возможна нормальная работа - если нет других повреждений.

Примечания:

  • Шаг 3 + 4) Поскольку корень хранилища не содержит много данных,этот шаг должен быть безболезненным.Однако вы можете выполнить их резервное копирование ранее, если возможны какие-либо изменения, которые не были зарегистрированы.
  • Шаг 6) Поскольку данные в подкаталогах не затронуты, они не будут загружены снова.Данные в корневом каталоге будут получены снова.
0 голосов
/ 03 октября 2011

Сначала сделайте резервную копию вашей полной рабочей копии.Затем обновите до последней версии свою рабочую копию.ваша последняя ревизия имеет корневую папку.SVN попытается снова написать эту папку.Тогда дерево конфликт покажет.Затем запустите очистку и подтвердите это.

...