Могу ли я игнорировать папку при оформлении заказа по svn? Мне нужно игнорировать папку DOC при оформлении заказа на моем сервере сборки.
изменить: игнорировать внешние не вариант. У меня есть некоторые внешние элементы, которые мне нужны.
Могу ли я игнорировать папку при оформлении заказа по svn? Мне нужно игнорировать папку DOC при оформлении заказа на моем сервере сборки.
изменить: игнорировать внешние не вариант. У меня есть некоторые внешние элементы, которые мне нужны.
Ответы:
Вы не можете напрямую игнорировать папки при оформлении заказа, но вы можете использовать разреженные проверки в 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
svn: Shallowing of working copy depths is not yet supported
Да, вы можете использовать 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- каталог-исключение для более подробной информации.
Том
В версиях до 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.
Вы можете поместить папку docs во внешний репозиторий, а затем использовать svn checkout --ignore-externals
.
external repository
значит. Вы можете это объяснить?
Да, в Subversion 1.5 есть функция под названием Sparse checkouts, которая может делать именно такие вещи.
Я нашел этот вопрос в поисках способа проверить источники 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.
Я недавно решил ту же задачу. Идея состоит в том, чтобы получить немедленный список папок / файлов в репозитории, исключая нужные вам записи, затем проверить оставшиеся папки и обновить немедленные файлы, если таковые имеются. Вот решение:
# 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-адрес и исключите шаблон. Запустите команду.
Спасибо,
Нет, игнорировать можно только при добавлении файлов.
Вы можете использовать разреженные проверки (если вы используете svn 1.5)
Как отмечали некоторые другие, вы можете просто использовать свойства svn: externals, а затем параметр --ignore-externals при оформлении заказа. Однако следует отметить, что svn: externals не обязательно должна ссылаться на другой репозиторий. Это может быть ссылка на другую папку в том же репо.