我可以在svn结帐时忽略文件夹吗?我需要在构建服务器上的结帐时忽略DOCs文件夹。
编辑:忽略外部不是一个选择。我有一些需要的外部条件。
我可以在svn结帐时忽略文件夹吗?我需要在构建服务器上的结帐时忽略DOCs文件夹。
编辑:忽略外部不是一个选择。我有一些需要的外部条件。
Answers:
您不能直接忽略签出时的文件夹,但是可以在svn 1.5中使用稀疏签出。例如:
$ svn co http://subversion/project/trunk my_checkout --depth immediates
这会将文件和目录从项目主干中检入“ my_checkout”,但不会递归到这些目录中。例如:
$ cd my_checkout && ls
bar/ baz foo xyzzy/
然后将“ bar”的内容取下来:
$ 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-目录排除以获取更多详细信息。
汤姆
您可以将docs文件夹放在外部存储库中,然后使用svn checkout --ignore-externals
。
external repository
意思。你能解释一下吗?
是的,Subversion 1.5具有一个称为“ 稀疏签出”的功能,可以完成这种事情。
我发现这个问题,是在寻找一种排除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:externals属性,然后使用--ignore-externals选项。有一点要注意,然而,就是SVN:外部组件并没有必然需要参考其他资料库。它可以引用同一仓库中的其他文件夹。