Изменение глубины в существующей рабочей копии 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
сначала в безопасное место?
4 ответа
Ууууу, у меня возникла эта проблема, и TortoiseSVN поддерживает решения как для добавления, так и для удаления элемента из разреженной проверки. http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html
1.Добавить: в проводнике Windows, щелкните правой кнопкой мыши на извлеченной папке, затем используйте TortoiseSVN? Repo-Browser, чтобы открыть браузер хранилища. Найдите подпапку, которую вы хотите добавить в свою рабочую копию, а затем используйте контекстное меню? Обновить элемент до ревизии....
2. Удалить; В корне щелкните правой кнопкой мыши / Repo-Browser / Обновить элемент до ревизии; затем выберите "Исключить".
Я закончил тем, что взломал это:
- Вручную отредактируйте настройку глубины на "немедленные" для
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.
Ничего подобного возрождению старого 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
,
Ключевым моментом здесь является то, что вы не создаете новую рабочую копию для решения вашей проблемы. Вы выполняете эти команды на своей существующей рабочей копии и сбрасываете глубину выбранных вами каталогов.
У меня была такая же проблема, но то, что вы написали, кажется невозможным в SVN 1.7, так как формат метаданных выглядит иначе.
Вот что я в итоге сделал (используя каталоги в вашей ситуации). Сначала я скопировал project1
а также project2
где-то безопасно.
svn co --depth immediates svn_url/projects
Это проверяет projects
с пустыми каталогами project1
а также project2
, Затем я удаляю пустые папки и помещаю фактические каталоги на их место. SVN дает мне некоторые странные сообщения, но, похоже, работает и позволяет мне фиксировать. (Не работает с --depth empty
а затем копировать папки в, но immediates
похоже на работу.)
Я согласен, что эта ситуация не идеальна, но именно поэтому я перехожу на Git для будущих проектов! Я давно пользуюсь SVN, но это выходит за рамки надежды.
Я не знаю, почему люди делают вещи трудным путем в других ответах.
Начиная с Subversion 1.6 можно простоsvn update --set-depth exclude <directory_you_want_to_prune_from_local_working_copy>