给定一个Subversion项目,其中某些模式总是被忽略,
*.log
*.idx
并且仅在例如项目根目录
中忽略某些模式*.out
如何在单个svn:ignore
属性中维护这两个列表?
为了维护项目范围的列表,每当我更改它时,我都会递归地应用根文件夹的svn:ignore
属性。但那将包括只能在根中忽略的模式。
如果我不递归地应用它,那么子文件夹中不会忽略其他模式。
更新:如果你已经习惯了Mercurial(就像我一样),你可能会建议将路径放在root的忽略列表中,比如
*/*.idx
或
*\*.idx
在最新的Subversion中,这些都不适合我。
答案 0 :(得分:4)
在Subversion中有两种使用忽略的机制:
global-ignores
列表中。全局适用于所有项目。一般来说,定义过多的全局忽略是件坏事。svn:ignore
财产。通过设置svn:ignore
属性,可以定义在为其定义此属性的目录中忽略的文件或文件夹列表。全局忽略和svn:ignore
属性都不使用正则表达式,而是使用符合fnmatch模式语法的模式。其中仅定义了三种类型的通配符?
,*
和[]
。您可以使用ls
来了解这些模式的工作原理。
可以递归地设置Subversion属性。这适用于*.idx
和*.log
个文件:
$ svn st
? test.log
? test.idx
? recursive/test.log
使用两行创建文件ignores
:
*.log
*.idx
然后递归设置svn:ingore
属性:
$ svn propset --recursive svn:ignore -F ingores .
property 'svn:ignore' set on '.'
property 'svn:ignore' set on 'recursive'
$ rm ignores
$ svn st --no-ignores
I test.log
I test.idx
I recursive/test.log
在项目根目录中编辑svn:ignore
属性之后:
$ svn propedit svn:ignore PROJECT_ROOT
并为*.out
模式添加排除。
鉴于:
但是,如果我不递归地应用它,则子文件夹中不会忽略其他模式。
唯一的方法是将这些模式添加到全局忽略中。
一些注意事项:
svn:ignore
属性后,可以递归删除
svn propdel -R ...
svn:ignore
财产。希望这有帮助。
答案 1 :(得分:0)
阅读propset和propedit命令,找到一大差异
因此,你可以