Папка игнорирования проверки SVN


98

Могу ли я игнорировать папку при оформлении заказа по svn? Мне нужно игнорировать папку DOC при оформлении заказа на моем сервере сборки.

изменить: игнорировать внешние не вариант. У меня есть некоторые внешние элементы, которые мне нужны.



Отвечает ли это на ваш вопрос? Как игнорировать каталог с SVN?
Готье

Ответы:


104

Вы не можете напрямую игнорировать папки при оформлении заказа, но вы можете использовать разреженные проверки в svn 1.5. Например:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

Это проверит файлы и каталоги из магистрали вашего проекта в my_checkout, но не будет возвращаться в эти каталоги. Например:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Затем, чтобы убрать содержимое панели:

$ cd bar && svn update --set-depth infinity

Примечание: в некоторых версиях 1.5 была ошибка, которая предотвратила это с помощьюsvn: Shallowing of working copy depths is not yet supported
gcb

79

Да, вы можете использовать SVN 1.6. Сначала вам нужно будет выполнить проверку, затем пометить папку для исключения, а затем удалить ненужную папку.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

Отныне любые обновления рабочей копии не будут повторно заполнять папку docs.

См. Http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ и http://subversion.apache.org/docs/release-notes/1.6.html#sparse- каталог-исключение для более подробной информации.

Том


2
Проголосовали за, потому что это избавило меня от необходимости проверять огромную папку, которая не имела отношения к моей работе.
dohpaz42 01

1
Это здорово, вместе с svn cleanup это сэкономило мне 12 ГиБ.
JonnyJD

1
Разве это не все еще изначально?
Хуангизм,

9

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

svn co -N foo
cd foo
svn up -N bar
svn up

Флаг -N делает операцию нерекурсивной. Вышеупомянутое не будет проверять что-либо еще на уровне foo, например. скажем, есть папка lala, последний svn up не будет проверять эту папку, но обновится bar.

Но позже вы можете svn up lalaдобавить его в кассу.

Предположительно это также работает с 1.5.


6

Это в клиенте TortoiseSVN 1.7.1 (также может быть доступно в некоторых более старых версиях):

  • Проверка SVN -> Выбрать URL-адрес репозитория

  • Нажмите «Элементы оформления заказа» (в разделе «Глубина оформления») и выберите только необходимые папки!


4

Вы можете поместить папку docs во внешний репозиторий, а затем использовать svn checkout --ignore-externals.


Именно это мы и сделали, чтобы пропустить некоторые готовые компоненты в предыдущем задании.
Марк Бесси,

2
Я не понимаю, что external repositoryзначит. Вы можете это объяснить?
Виктор

4

Да, в Subversion 1.5 есть функция под названием Sparse checkouts, которая может делать именно такие вещи.


2
Читая это, похоже, что разреженные кассы ограничивают только глубину кассы. Они не могут игнорировать одну конкретную папку.
Джон Милликин

Конечно, вам, возможно, придется немного поработать, например, ограничить глубину родительской папки с помощью --depthmediates, а затем проверить все остальные папки, кроме той, которую вы хотите игнорировать. Дело в том, что инструменты есть, если вам нужно их использовать.
Грег Хьюгилл,

Я ценю упоминание SparseCheckouts, и это точно интересно, но этот ответ не затрагивает исходный вопрос. Конечно, я могу проверять один файл за раз, и это приведет к получению локальных копий определенных файлов, которые мне нужны, но какая заноза в заднице, чтобы делать каждый индивидуально. Я считаю, что автор этого вопроса спрашивает об игнорировании конкретной папки, а не о глубине x папок, и о разрешении компьютеру выполнять работу - ту же работу, которую вы рекомендуете, можно выполнить вручную.
barrypicker

Версии 1.6+ предоставляют дополнительную возможность игнорировать папки и более общий контроль над тем, что включать / исключать в рабочей копии (где v1.5 очень ограничена в этом) svnbook.red-bean.com/en/1.7/svn. advanced.sparsedirs.html
FruitBreak

3

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

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

Обратите внимание, что вы можете изменить исключения по своему усмотрению, но. * Рекомендуется пропустить рабочий каталог (который уже обновлен) и все каталоги .svn.


какой это язык?
Pup

это команды оболочки unix (их также можно сохранить и выполнить как файл сценария)
mrlem

2

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

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

Перейдите в исходный рабочий каталог. Скопируйте команды. Вставить. Измените соответствующий URL-адрес и исключите шаблон. Запустите команду.

Спасибо,


1
эй, сколько 6 лет разработчикам? В последней строке у вас есть $ ubrpath. Где это установлено?
D-Klotz

1
@ D-Klotz, спасибо, вместо этого должен быть $ rpath, который, в свою очередь, установлен в путь к репозиторию. <br/> Извините за опоздание на год
bv.

1

Нет, игнорировать можно только при добавлении файлов.
Вы можете использовать разреженные проверки (если вы используете svn 1.5)


1

Как отмечали некоторые другие, вы можете просто использовать свойства svn: externals, а затем параметр --ignore-externals при оформлении заказа. Однако следует отметить, что svn: externals не обязательно должна ссылаться на другой репозиторий. Это может быть ссылка на другую папку в том же репо.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.