Изменение глубины в существующей рабочей копии SVN без повторной загрузки
У меня есть рабочая копия всего репозитория SVN, но я хочу изменить его на разреженную рабочую копию из-за проблем с дисковым пространством.
Один из способов сделать это:
svn up --set-depth immediates projects
svn up --set-depth infinity projects/project1
svn up --set-depth infinity projects/project2
Однако сначала удалите project1
и project2
, а затем повторно загрузите их. Это действительно неудобно, потому что они очень большие, а скорость загрузки сервера очень низкая. Я попробовал это (с другой, меньшей частью репо, в качестве эксперимента):
svn up --set-depth infinity projects/project1
svn up --set-depth infinity projects/project2
svn up --set-depth immediates projects
Но тогда последняя команда просто отменяет первые 2.
Как установить глубину рабочей копии без ее немедленного обновления/изменения, так что у меня будет возможность правильно настроить подкаталоги в первую очередь?
Или есть другой способ выполнить то, что я хочу, например. сначала скопировав project1
и project2
в безопасное место?
Ответы
Ответ 1
Woo hoo, у меня была эта проблема, и TortoiseSVN поддерживает решения для добавления и удаления элемента из разреженной проверки.
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html
1. Чтобы добавить:
В проводнике Windows, щелкните правой кнопкой мыши на извлеченной папке, затем используйте TortoiseSVN? Repo-Browser, чтобы открыть браузер хранилища. Найдите подпапку, которую вы хотите добавить в свою рабочую копию, а затем используйте контекстное меню? Обновить элемент до версии....
2.Чтобы удалить;
Из вашего корня, щелкните правой кнопкой мыши /Repo -Browser/Update для изменения; затем выберите "Исключить".
Ответ 2
Я закончил тем, что взломал его:
- Вручную отредактируйте настройку глубины так, чтобы она "была немедленно" для
projects
*.
- Жесткое удаление (не удаление SVN) всех дочерних элементов
projects
кроме project1
и project2
-
svn up projects
[*] Для этого откройте projects/.svn/entries
в текстовом редакторе и измените
b125e325-6f7c-4931-9942-d1ea1ea1441a
X
в
b125e325-6f7c-4931-9942-d1ea1ea1441a
immediates
X
Примечание.. Эта строка, соответствующая UUID, по-видимому, отличается для каждого репо, а X
является фактически шестнадцатеричным значением 0x0C
, которое я не могу показать здесь на SO.
Ответ 3
У меня была такая же проблема, но то, что вы написали, похоже, не возможно в SVN 1.7, так как формат метаданных выглядит по-другому.
Вот что я сделал (используя каталоги в вашей ситуации). Во-первых, я скопировал project1
и project2
где-то в безопасности.
svn co --depth immediates svn_url/projects
Это проверяет projects
на пустые каталоги project1
и project2
. Затем я удаляю пустые папки и помещаю фактические каталоги вместо них. SVN дает мне некоторые странные сообщения, но, похоже, работает и позволяет мне совершать. (Он не работает с --depth empty
, а затем копирует папки, но immediates
, похоже, работает.)
Я согласен, что эта ситуация не идеальна, но почему я перехожу на Git для будущих проектов! Я использовал SVN в течение длительного времени, но он выходит за рамки надежды.
Ответ 4
Ничего похожего на возрождение старого SO-вопроса.
Я работаю с очень похожей проблемой, когда я отключаюсь от соединительной линии, чтобы создать пакет выпуска, но из-за ограничений я должен клонировать файлы, предназначенные только для dev.
asset
└── js
└── some
└── directories
├── assets
│ ├── files ...
├── dev **<------------ This folder needs to be empty**
│ ├── apis
│ ├── campaign
│ ├── features
│ ├── modules
│ ├── main.js
│ └── tags
└── release
├── apis
├── data
├── features
├── modules
├── main.js
└── tags
Я решил, что я исключил бы файлы dev, чтобы устранить искушение исправить исправление в ветке выпуска в неправильном каталоге.
Я делаю много редких проверок, чтобы избежать больших папок в багажнике, но никогда не делал это ретроспективно на рабочей копии. Кажется, это довольно прямолинейно.
Чтобы изменить рабочую копию, чтобы asset/js/some/directories/dev
был пуст, вы можете просто запустить команду svn co
еще раз на рабочей копии.
В моем случае следующие работы
svn co --depth empty ^/branches/releases/latest/asset/js/some/directories/dev \
asset/js/some/directories/dev
В основном вы выполняете частичную проверку на существующей рабочей копии, и это будет работать на любом уровне. В исходном случае вы просто запускаете следующее.
svn co --depth immediates ^/branches/mybranch/projects projects
svn co --depth immediates ^/branches/mybranch/project1 project1
svn co --depth immediates ^/branches/mybranch/project2 project2
Для тех, кто не знает, карет ^
является сокращением для корня репозитория, поэтому он работает как относительный путь в вашем репозитории, немного похожий на ../some/location
.
Ключевым моментом здесь является то, что вы не создаете новую рабочую копию, чтобы исправить вашу проблему. Вы выполняете эти команды на существующей рабочей копии и восстанавливаете глубину выбранных вами каталогов.