在颠覆中递归地忽略整个源代码树中的文件

Posted

技术标签:

【中文标题】在颠覆中递归地忽略整个源代码树中的文件【英文标题】:Recursively ignoring files in the entire source tree in subversion 【发布时间】:2010-11-16 20:56:18 【问题描述】:

我对 Subversion 并不陌生,但到目前为止我一直在使用 Tortoise 而从未使用过命令行。我的问题是,我如何忽略整个源中的所有文件(如 *.o),而不仅仅是根目录。

例如,如果我有以下文件: /myfile.o /folder1/myfile2.o /folder1/folder1.1/myfile3.o /folder2/myfile4.o

如果 svn propedit svn:ignore "."在根目录中,并添加*.o,它将忽略myfile.o,但不会忽略/folder1/myfile2.o、/folder1/folder1.1/myfile3.o、/folder2/myfile4.o。有没有办法为整个项目添加 *.o (我不能为整个存储库这样做,我知道可以这样做,因为这个项目与许多其他项目位于存储库中)?

如果我需要澄清,请告诉我。谢谢!

【问题讨论】:

【参考方案1】:

编辑

下面提供的原始答案是在 Subversion v1.8 之前给出的,它引入了一种设置默认存储库级别忽略(称为 svn:global-ignores)的方法,而无需覆盖/替换根目录和每个子目录上的 svn:ignore 属性.从 1.8 开始,实现您想要的最佳方式是调用以下命令(感谢 TManhente):

svn propset svn:global-ignores '*.o' .

在早期版本(和更高版本)上,您仍然可以使用下面原始答案中指示的方法;但是,请注意,这假设您可以替换/覆盖每个子目录上的 svn:ignore 属性...这对于小型/新存储库可能没问题,但如果您有一个大的存储库,可能不是您想要的/old 存储库,其中某些子目录可能具有您不希望覆盖的独立 svn:ignore 属性。

原答案

您可以将“-R”或“--recursive”选项与“svn propset”一起使用,如下所示:

svn propset svn:ignore '*.o' 。 --递归

更多信息

对于这两种情况,您可以使用以下命令获取有关 svn propset 的更多信息:

svn帮助道具

【讨论】:

谢谢,效果很好!我仍然了解他们的文档。正如我所说,到目前为止,我只使用过乌龟,这给了你很好的对话框和解释:)。 你还有 --force svn propset svn:ignore "*.pdb *.db" c:\portal\ --recursive --force 接受的答案将清除所有其他 svn:ignore 设置(如果您拥有它们)。然后你可能想要***.com/questions/3086418/… 我想支持 hackmaster 的警告,并感谢他提供的链接解决方案。仅供参考,我选择了位于 ~/.subversion/config 中的全局配置解决方案 hackmaster 的评论应该固定在这个帖子的顶部。包含破坏存储库(至少是其中的某些部分)的说明的“已接受答案”不是一件好事;)【参考方案2】:

只是一个更新:Subversion 1.8.0 引入了 Inherited PropertiesRepository Dictated Configuration (For auto-props and ignores),也可以在这种情况下使用。

您可以在根路径中设置新的svn:global-ignores 属性。它将“仅影响以设置属性的路径为根的子树”。

这个新属性的设置就像svn:ignore:

    svn propset svn:global-ignores '*.o' .

更多信息请访问Subversion 1.8.0 Release Notes。

【讨论】:

我很想知道如何使用自动道具来设置它? 我已将bin debug obj 添加到svn:global-ignores 但之后,当我svn propget svn:global-ignores 它只返回obj (最后一个),我怎么能忽略多个文件/文件夹? Imgur @Luke:原因是您多次调用svn propset 命令。每次调用 propset 时,它都会将属性的先前值替换为您传递的新值。您需要做的是在单个propset 调用中添加所有忽略规则,或者使用svn propedit 而不是propset。查看命令的文档以获取更多信息。【参考方案3】:

正如@hackmaster.a 在评论中指出的那样,已接受答案中给出的示例具有消除所有先前svn:ignore 设置的副作用。使用 propedit 而不是 propset 也不起作用。

递归添加多个文件的正确方法是将它们的名称放在由svn:ignore 属性集与svn propset svn:ignore "[LIST]" . 设置的新行分隔的列表中

例如:

    svn propset svn:ignore -R "*.pkl
    > *.class
    > Thumbs.db
    > data.tmp" .

当然,> 只是 shell 提示符。

此命令将递归更改. 当前目录及其每个子文件夹的svn:ignore 属性。

【讨论】:

使用 1.7.4 抽出所有的 svn:ignore

以上是关于在颠覆中递归地忽略整个源代码树中的文件的主要内容,如果未能解决你的问题,请参考以下文章

递归地将整个文件夹添加到存储库

如何在二叉树中返回迭代遍历的迭代器?

如何理解二叉树中的递归

用于在 JavaScript 中的二叉树中插入节点的递归函数中的错误

正确地递归忽略特定文件夹下的所有文件,特定文件类型除外

Linux搜索所有文件中的内容