我可以忽略svn checkout上的文件夹吗? 我需要在我的构建服务器上的结帐时忽略DOCs文件夹。
编辑:忽略外部不是一个选项。 我有一些我需要的外部因素。
看看这个:/questions/116074/
您不能直接忽略结账时的文件夹,但您可以在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
注意:某些1.5版本中存在一个错误,使用svn: Shallowing of working copy depths is not yet supported阻止了此错误
注意:现在可以忽略v1.6中的文件夹,请参阅@tommy_turrell的回答......
是的,您可以使用SVN 1.6。您需要先进行结帐,然后标记要排除的文件夹,然后删除不需要的文件夹。
svn checkout /project
cd project
svn update --set-depth=exclude docs
rm -fr docs
从现在开始,对工作副本的任何更新都不会重新填充docs文件夹。
请参阅/subversion//03/sparse-directories-now-with-exclusion/和/docs/release-notes/1.6.html#sparse-目录排除更多详细信息。
汤姆
Upvoted,因为它使我免于检查与我的工作无关的巨大文件夹。
这很棒,与svn清理一起,这让我节省了12 GiB。
这还不是最初检查一切吗?
对于1.5之前的版本,我发现如果您只签出最顶层的文件夹然后有选择地更新,那么从那时开始更新只会影响你签出的内容。 IE浏览器。
svn co -N foo
cd foo
svn up -N bar
svn up
-N标志使操作不是递归的。以上内容不会检查foo级别的任何其他内容,例如。说有一个文件夹lala,最后的svn up不会检出该文件夹,但会更新bar。
但是稍后您可以svn up lala,因此,将其添加到结帐。
据推测,这也适用于1.5。
这是在TortoiseSVN客户端1.7.1(也可能在某些旧版本中可用):
SVN签出 - >选择存储库的URL
单击"结帐项目"(在结帐深度下)并仅选择
需要文件夹!
您可以将docs文件夹放在外部存储库中,然后使用svn checkout --ignore-externals。
这就是我们最后在上一个作业中跳过一些预先构建的组件。
我不明白external repository的意思。你能解释一下吗?
是的,Subversion 1.5有一个名为Sparse checkouts的功能,它可以做到这一点。
从阅读中看,稀疏检查看起来只限制结账的深度。他们不能忽略一个特定的文件夹。
当然,您可能需要做一些额外的工作,例如使用--depth immediates限制父文件夹的深度,然后检查除您想要忽略的文件夹之外的所有其他文件夹。关键是,如果您需要使用它们,工具就在那里。
我很欣赏提到SparseCheckouts,这很有意思,但是这个回答没有解决原始问题。当然,我可以一次检出一个文件,这将导致我想要的特定文件的本地副本,但是每个人需要单独完成这些文件是多么痛苦。我相信这个问题的作者要求忽略一个特定的文件夹,而不是x文件夹的深度,并允许计算机完成工作 - 你推荐的同样的工作可以手动完成。
1.6+版本提供了忽略文件夹的附加功能,以及对工作副本中包含/排除内容的更多控制(其中v1.5在此非常有限)svnbook.red-/en/1.7/svn。 advanced.sparsedirs.html
我发现这个问题正在寻找一种方法来检查WebKit源,同时排除回归测试。我最终得到了以下内容:
svn checkout /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目录。
这是什么语言?
这些是unix shell命令(它们也可以保存并作为脚本文件执行)
我最近解决了同样的任务。
想法是获取存储库下的文件夹/文件的直接列表,排除您需要的条目,然后检查剩余的文件夹并更新即时文件(如果有的话)。
这是解决方案:
# Path to the svn repository to be checked out
rpath=https://svn-/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| |
|g' | egrep '^.*[^/]$'` && \
# Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |
|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|\
切换到源工作目录。复制命令。糊。更改相应的URL并排除模式。运行命令。
谢谢,
嘿开发人员有6年了?在你的最后一行你有$ ubrpath。那套在哪里?
@ D-Klotz,谢谢,这应该是$ rpath,而后者又设置为存储库路径。对不起,迟到了一年
正如其他一些人所提到的,您可以在结账时使用svn:externals属性,然后使用--ignore-externals选项。但有一点需要注意的是,svn:externals不一定需要引用另一个存储库。它可以是同一个仓库中某些其他文件夹的引用。
不,忽略仅用于添加文件。
您可以使用稀疏检出(如果使用svn 1.5)