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

SVN: Вы можете удалять каталоги только из локальной проверки (а не из репозитория)?

Предположим, что у вас есть каталог под управлением subversion, который содержит некоторые файлы и множество подкаталогов, например:

file1.txt
file2.txt
file3.txt
dir1/
dir2/
dir3/
dir4/
:
dirXX/

Теперь вам нужны файлы и некоторые из них, но не все. Это можно сделать с помощью SVN. Просто сделайте checkout нерекурсивным:

svn checkout -N <URL>

Это проверяет только первый каталог и файлы внутри. Никакие подкаталоги не включены. Даже если вы заходите в каталог оформления и запускаете "svn up" , он будет только обновлять ранее проверенные файлы, он не будет добавлять каталоги. Теперь вы можете выборочно добавлять нужные вам каталоги, явно обновляя их. Например. если вам нужны только dir2 и dir4, вы можете войти в каталог оформления и выполнить

svn up dir2
svn up dir4

Если вы запустите общий "svn up" в будущем, он будет обновлять только файлы и эти два каталога, он не добавит ни одного из других каталогов.

Теперь проблема: что, если я решаю в какой-то более поздний момент, что мне больше не нужен dir2? Как я могу избавиться от него? Кажется, нет никакого способа сделать это, кроме как удалить весь чек и начать с нуля.

Когда вы просто удаляете dir2, следующий "svn up" вернет его, так как "svn status", конечно, покажет его как пропавшую ( "!" перед своим именем). Запуск "svn remove" удалит его, конечно, но в следующий коммит он также удалит его из репозитория, чего не должно быть.

Даже новая функция разреженного каталога ( "мелкая проверка" ) SVN 1.5 здесь бесполезна:

Реализация Subversion 1.5 мелкие проверки хороши, но не поддержать пару интересных поведения. Во-первых, вы не можете де-телескоп рабочего рабочего элемента. Выполнение svn update --set-depth empty в рабочей копии с бесконечной глубиной не имеют эффекта отбрасывания все, кроме самого верхнего каталог - это просто ошибка.
- http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html

Неужели это невозможно с SVN? Кто-нибудь когда-либо придумывал умную работу?

Просто создав каталог проверки (без SVN), а затем проверив отдельные подкаталоги из репозитория напрямую, поскольку подкаталоги в этот каталог будут работать для каталогов: теперь каждый каталог является самостоятельной проверкой, может быть обновлен и один раз не будет требуется больше, вы можете просто удалить его. Однако, как я могу получить файлы (например, file1.txt)? SVN не позволяет проверять отдельные файлы, вы можете проверять только целые каталоги.

4b9b3361

Ответ 1

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

То, что я пытаюсь сделать, не может быть сделано с Subversion 1.4 или Subversion 1.5; Период.
Нет работы вокруг, это так, как есть.

Это может быть сделано с помощью Subversion 1.6.

В отличие от SVN 1.5, SVN 1.6 может уменьшить глубину в каталоге

svn up --set-depth exclude dir2

является решением. Он устанавливает глубину для dir2 равным нулю, и она сразу же исчезнет из проверки, и никакое обновление не вернет ее, если вы явно не измените глубину этого каталога на значение снова (или просто выполните обновление на нем без параметра глубины, поскольку не давая никакой глубины, всегда означает бесконечность, если вы не используете нерекурсивный, что означает "файлы" ).

СОВЕТ:
На самом деле SVN 1.6 не может действительно уменьшить глубину так же, как она может ее увеличить. Вы можете увеличить его с любого уровня до любого более высокого уровня. Вы можете уменьшить его до "исключить" (самый низкий уровень всех). Если вы хотите уменьшить с "бесконечности" (наивысший) на "файлы" (где-то посередине), вы должны сначала свести его к "exclude" (в результате чего каталог исчезнет), а затем снова верните его в "файлы" . Это немного взломанный, но он работает просто хорошо.

Ответ 2

Для тех, кто сталкивается с этим позже, и использует TortoiseSVN, вот как сделать то же самое...

  • Щелкните правой кнопкой мыши папку, которую вы больше не хотите проверять (это папка, которую вы хотите исключить)
  • В контекстном меню выберите "TortoiseSVN > Update to Revision..."
  • В появившемся окне установите в раскрывающемся списке "Глубина обновления" значение "Исключить"
  • Нажмите "ОК". SVN автоматически удалит этот каталог с вашего диска.

(Примечание: это было сделано с TortoiseSVN 1.7.5 и может отличаться для других версий.)

Ответ 3

Обновление: я запускаю SVN 1.6.11, и я смог де-телескоп с помощью svn up --set-depth empty dir, а не для exclude каталога.

Ответ 4

Вы можете попробовать этот трюк с использованием локального репозитория и svn: externals.

Не пробовал сам, хотя.

Ответ 5

С svn 1.6, --set-depth является ответом.

С помощью svn < 1.6, вы можете получить разреженные кавычки, злоупотребляя svn switch: создать пустой каталог где-то в вашем репозитории и switch поддиректории, которые вам не нужны прямо сейчас, чтобы указать на это вместо их "реального" URL.