100

我可以忽略 svn checkout 上的文件夹吗?我需要在我的构建服务器结帐时忽略 DOCs 文件夹。

编辑:忽略外部不是一个选项。我有一些我需要的外部设备。

4

10 回答 10

105

您不能在结帐时直接忽略文件夹,但可以在 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
于 2008-10-20T11:44:29.913 回答
81

是的,您可以使用 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-目录排除以获取更多详细信息。

汤姆

于 2011-12-09T14:03:05.670 回答
9

对于 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。

于 2008-10-20T11:54:42.857 回答
6

这是在 TortoiseSVN 客户端 1.7.1 中(也可能在某些旧版本中可用):

  • SVN checkout --> 选择存储库的 URL

  • 单击“结帐项目”(在结帐深度下)并仅选择所需的文件夹!

于 2012-08-31T04:55:51.537 回答
4

是的,Subversion 1.5有一个叫做Sparse checkouts的特性,它可以做这种事情。

于 2008-10-10T19:56:28.367 回答
4

您可以将 docs 文件夹放在外部存储库中,然后使用svn checkout --ignore-externals.

于 2008-10-10T19:57:00.253 回答
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 目录。

于 2014-08-12T05:39:33.353 回答
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 并排除模式。运行命令。

谢谢,

于 2010-12-20T17:24:44.667 回答
1

不,忽略仅用于添加文件。
您可以使用稀疏结帐(如果您使用 svn 1.5)

于 2008-10-10T19:56:03.030 回答
1

正如其他一些人所提到的,您可以只使用 svn:externals 属性,然后在结帐时使用 --ignore-externals 选项。然而,需要注意的一点是 svn:externals不一定需要引用另一个存储库。它可以是对同一仓库中其他文件夹的引用。

于 2008-10-13T09:26:05.640 回答