使用 tortoise-svn 和命令行 svn 进行递归忽略和不忽略

问题描述 投票:0回答:1

我有一个包含这些文件夹的存储库,并且我有这些目标:

/temp/           <-- I want svn to ignore this
/**/temp         <-- I want svn to ignore this ('temp' in any recursive folder, i.e. at any depth level)
/bar/**/temp     <-- I want svn to NOT ignore 'temp' anywhere inside 'bar' (at any depth level)

阅读 svn:ignore 文档,我找不到任何可以处理这个问题的语法。

a) 使用 tortoise-svn 客户端可以吗?

b) 常规命令行 svn 客户端怎么样?

svn tortoisesvn svnignore
1个回答
0
投票

您的问题包含两部分,1)如何递归地忽略目录和2)如何不忽略某个目录。

不幸的是,第一个问题的答案似乎是不可能的。与 git 通常在其根目录中具有

.gitignore
不同,Subversion 在每个目录级别评估
svn:ignore
属性。引用自红豆书关于忽略未版本控制的项目(强调我的):

当在版本化目录中找到时,

svn:ignore
属性应包含换行符分隔的文件模式列表,Subversion 应使用该列表来确定同一目录中的可忽略对象。[..] 再次值得注意的是,与 global-ignores
 选项不同,
svn:ignore
 属性中找到的模式仅适用于设置该属性的目录,
而不是其任何子目录。

第二个问题的答案已经隐藏在链接页面的标题中:您只忽略

unversioned 项目。一旦您对文件或目录进行了svn add

'编辑,它将不再被忽略。即使 
svn:ignore
 会这么说。

顺便说一句,无论您使用 TortoiseSVN 还是

svn:ignore

 CLI,对 
svn
 的评估都是相同的。界面不同,底层功能是一样的。

第一个问题的解决方案是遍历所有目录并将“temp”添加到其

svn:ignore

 属性中。如果您不想使用 TortoiseSVN 单击所有目录,您可以考虑使用您最喜欢的脚本语言编写一个小脚本。

如果加上

bar/temp

,第二个问题就已经解决了。如果您决定编写脚本,则不应将 
svn:ignore
 设置为 
bar
。虽然没有必要,但不这样做可能会导致意外。

© www.soinside.com 2019 - 2024. All rights reserved.