Svn 如何在Subversion中的不同文件夹级别维护不同的忽略列表?
给定一个Subversion项目,其中某些模式总是被忽略Svn 如何在Subversion中的不同文件夹级别维护不同的忽略列表?,svn,Svn,给定一个Subversion项目,其中某些模式总是被忽略 *.log *.idx 某些模式仅在项目根中被忽略 *.out 如何在单个svn:ignore属性中维护这两个列表 为了维护项目范围的列表,每当我更改根文件夹的svn:ignore属性时,我都会递归地应用它。但这将包括只应在根中忽略的模式 但是,如果我不递归地应用它,那么子文件夹中的其他模式将不会被忽略 更新:如果您习惯Mercurial(像我一样),您可以建议将路径放在根目录的忽略列表中,如 */*.idx 或 在最新的Subve
*.log
*.idx
某些模式仅在项目根中被忽略
*.out
如何在单个svn:ignore
属性中维护这两个列表
为了维护项目范围的列表,每当我更改根文件夹的svn:ignore
属性时,我都会递归地应用它。但这将包括只应在根中忽略的模式
但是,如果我不递归地应用它,那么子文件夹中的其他模式将不会被忽略
更新:如果您习惯Mercurial(像我一样),您可以建议将路径放在根目录的忽略列表中,如
*/*.idx
或
在最新的Subversion中,这两种机制都不适用于我。Subversion中有两种机制可以使用:
- 全局忽略。模式可以添加到subversion配置中的
列表中。全局应用于所有项目。一般来说,定义太多的全局忽略是一件坏事全局忽略
svn:忽略属性。通过设置
属性,可以定义在定义此属性的目录中忽略的文件或文件夹的列表svn:ignore
svn:ignore
属性都不使用正则表达式,而是使用符合模式语法的模式。它只定义了三种通配符类型?
、*
和[]
。您可以使用ls
来感受这些模式是如何工作的
Subversion属性可以递归设置。这将适用于*.idx
和*.log
文件:
$ svn st
? test.log
? test.idx
? recursive/test.log
创建一个包含两行的文件忽略:
*.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:忽略属性
- 递归propset应该尽早完成。它删除正在设置的属性的旧值
- 主要的优点是忽略很少被编辑
- 通过GUI工具递归编辑属性似乎更容易
希望这有帮助。在Subversion中有两种机制可以使用:
- 全局忽略。模式可以添加到subversion配置中的
全局忽略
列表中。全局应用于所有项目。一般来说,定义太多的全局忽略是一件坏事
svn:忽略属性。通过设置svn:ignore
属性,可以定义在定义此属性的目录中忽略的文件或文件夹的列表
全局忽略和svn:ignore
属性都不使用正则表达式,而是使用符合模式语法的模式。它只定义了三种通配符类型?
、*
和[]
。您可以使用ls
来感受这些模式是如何工作的
Subversion属性可以递归设置。这将适用于*.idx
和*.log
文件:
$ svn st
? test.log
? test.idx
? recursive/test.log
创建一个包含两行的文件忽略:
*.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:忽略属性
- 递归propset应该尽早完成。它删除正在设置的属性的旧值
- 主要的优点是忽略很少被编辑
- 通过GUI工具递归编辑属性似乎更容易
希望这能有所帮助。阅读有关propset和propedit命令的内容,并找到一个很大的区别
- propset可以是递归的
- 不可能
因此,你可以
- 在repo根目录中使用propset-R和两个repo范围的模式(检查结果以查看它在树上的填充情况)
- 使用PropertEdit编辑仅根文件夹的svn属性,并添加本地忽略模式*.out
阅读有关propset和propedit命令的内容,发现一个很大的区别
- propset可以是递归的
- 不可能
因此,你可以
- 在repo根目录中使用propset-R和两个repo范围的模式(检查结果以查看它在树上的填充情况)
- 使用PropertEdit编辑仅根文件夹的svn属性,并添加本地忽略模式*.out
Alex,谢谢你的回复。我同意应该避免全球忽视,我希望这些都能与项目一起进行。所以我不确定你的建议。仅向根目录添加模式是不够的,因为这些模式不会自动应用于子目录。再次感谢,和+1提供了所有详细信息。我有