【问题标题】:Is SVN global ignore recursive?SVN 全局忽略递归吗?
【发布时间】:2011-09-29 15:14:18
【问题描述】:

我是 SVN 新手,我想递归地忽略一个目录,就像在 Git 中一样。我有一个目录sample,我想递归地忽略它。

>svn status
sample/first/1.jpg
sample/second/2.jpg
sample/third/3.jpg

我试过了:

  1. svn ps svn:ignore "*" .sample目录下)
  2. ~/.subversion/config 中的全局忽略设置为global-ignores = sample

但是当我运行svn status时它仍然显示相同的结果:

>svn status
sample/first/1.jpg
sample/second/2.jpg
sample/third/3.jpg

如何递归地忽略 SVN 中的目录?

【问题讨论】:

    标签: svn


    【解决方案1】:

    svn -R propset svn:ignore . -F somefile.txt

    其中 somefile.txt 是一个包含所有你想要递归设置的 svn 忽略模式的文件。

    【讨论】:

    • 我刚刚运行了 `svn -R propset svn:ignore -F .\ignorePatterns.txt` 并收到以下错误:svn: E205001: Explicit target argument required
    • @ShaunLuttin 在我的示例中, svn:ignore 在当前工作目录 '.' 上完成。 (在我的示例中,它周围没有引号)。在您的示例中,您省略了目录并移动了点以创建文件“.\ignorePatterns.txt”的相对路径。您不能针对 nothing 提交一组属性,因为 SVN 是基于虚拟文件系统的。您需要针对目录或文件提交属性。
    • 上面的命令会自动处理新添加的目录吗(在上面的命令运行之后)?
    • @KrishPrabakar 不,这不会在不存在的目录上设置属性。 SVN 是一个经过修订的文件系统;而且,您不能在不存在的目录或文件上设置权限/所有权/属性。要尝试做这样的事情,您必须重新配置所有 SVN 客户端,这并不是真正的正确方法。最好有一个审核系统,以及在审核合并时检查此类内容的政策。
    • 请参阅下面的“svn:global-ignores”(@markmnl)答案以获得 SVN 1.8 + 的解决方案
    【解决方案2】:

    如果您想忽略目录samples 以及其中的所有内容,您必须在包含samples 目录的目录中设置svn:ignore。你是在samples 内完成的。请注意两点:

    1. svn:ignore 仅影响 unversions 文件。这意味着,SVN 已经知道的文件和目录仍然会显示出来。

    2. svn:ignore 设置不是累积或递归的。如果您想忽略树中的 *.jpg 文件,则必须在每个目录中将 svn:ignore 设置为 *.jpg

    请注意,命令svn propset 有一个-R(又名递归)选项,可能有帮助。但请记住,propset 不是propadd。如果您想在树中设置不同的值,这当然只是一个问题。

    【讨论】:

      【解决方案3】:

      从 SVN 1.8 开始,有一个新的 SVN 属性可以做到这一点。见底部this page from the SVN book

      svn:global-ignores
      

      它适用于你设置它的文件夹和下面的所有东西,你不需要指定递归。例如在当前目录上设置:

      svn propset svn:global-ignores "bin obj" .
      

      【讨论】:

        【解决方案4】:

        来自http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.advanced.props.special.ignore

        “在 svn:ignore 属性中找到的模式仅适用于设置了该属性的目录,而不适用于它的任何子目录。”

        [...]

        “一旦对象在 Subversion 的控制之下,忽略模式机制就不再适用于它。换句话说,不要期望 Subversion 避免提交您对版本化文件所做的更改,因为该文件的名称与忽略模式——Subversion 总是注意到它所有的版本化对象。”

        您可以使用 -R 标志,但这只会递归应用属性 - 它不会更改属性效果,因此不会应用于创建的任何新目录。

        另外我建议使用 propedit 而不是 ps,因为它允许多行编辑,否则处理多个忽略模式会很棘手。

        【讨论】:

          【解决方案5】:

          对于 *nix 上的用户:

          虽然文档暗示 ~.subversion/config 应该已经有默认配置,但我的(Ubuntu 上的 SVN 1.6.17)是空的。

          这是我最终开始使用的格式(这是整个文件),包括默认设置,我在末尾添加了 *.ignore:

          [Miscellany]
          global-ignores=*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.ignore
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-03
            • 2011-11-12
            • 1970-01-01
            • 2011-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多