Изменение глубины в существующей рабочей копии 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>

Другие вопросы по тегам