Подтвердить что ты не робот

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

4b9b3361

Ответ 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.

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