Изменение глубины в существующей рабочей копии SVN без повторной загрузки - PullRequest
32 голосов
/ 28 августа 2011

У меня есть рабочая копия всего хранилища 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 в безопасное место первым?

Ответы [ 5 ]

26 голосов
/ 29 марта 2013

Ууууу, у меня возникла эта проблема, и TortoiseSVN поддерживает решения как для добавления, так и для удаления элемента из разреженной проверки.http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

1.Добавить: в проводнике Windows, щелкните правой кнопкой мыши по извлеченной папке, затем используйте TortoiseSVN?Repo-Browser для вызова браузера репозитория.Найдите подпапку, которую вы хотите добавить в свою рабочую копию, а затем используйте контекстное меню?Обновить элемент до версии ....

2. Удалить;В корне щелкните правой кнопкой мыши / Repo-Browser / Обновить элемент до ревизии;затем выберите «Исключить».

3 голосов
/ 29 августа 2011

Я закончил взломом:

  • Вручную отредактируйте настройку глубины на «немедленное» для 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.

1 голос
/ 18 октября 2017

Ничего подобного восстановлению старого 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.

Ключ в том, что вы не создаете новую рабочую копию для решения вашей проблемы.Вы выполняете эти команды в своей существующей рабочей копии и сбрасываете глубину выбранных вами каталогов.

1 голос
/ 29 сентября 2012

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

Вот что я в итоге сделал (используя каталоги в вашей ситуации),Сначала я скопировал project1 и project2 в безопасное место.

svn co --depth immediates svn_url/projects 

Это проверяет projects с пустыми каталогами project1 и project2.Затем я удаляю пустые папки и помещаю фактические каталоги на их место.SVN дает мне некоторые странные сообщения, но, похоже, работает и позволяет мне фиксировать.(Он не работает с --depth empty и затем копирует папки, но immediates, кажется, работает.)

Я согласен, что эта ситуация не идеальна, но поэтому я переключаюсь на Git для будущегопроекты!Я давно пользуюсь SVN, но это выходит за рамки надежды.

0 голосов
/ 11 марта 2019

Я не знаю, почему люди поступают так же сложно в других ответах.

Начиная с Subversion 1.6, можно просто сделать svn update --set-depth exclude <directory_you_want_to_prune_from_local_working_copy>

...