Svn 如何在Subversion中的不同文件夹级别维护不同的忽略列表?

Svn 如何在Subversion中的不同文件夹级别维护不同的忽略列表?,svn,Svn,给定一个Subversion项目,其中某些模式总是被忽略 *.log *.idx 某些模式仅在项目根中被忽略 *.out 如何在单个svn:ignore属性中维护这两个列表 为了维护项目范围的列表,每当我更改根文件夹的svn:ignore属性时,我都会递归地应用它。但这将包括只应在根中忽略的模式 但是,如果我不递归地应用它,那么子文件夹中的其他模式将不会被忽略 更新:如果您习惯Mercurial(像我一样),您可以建议将路径放在根目录的忽略列表中,如 */*.idx 或 在最新的Subve

给定一个Subversion项目,其中某些模式总是被忽略

*.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提供了所有详细信息。我有