在subversion中递归地忽略整个源树中的文件

时间:2009-08-05 01:09:57

标签: svn tortoisesvn version-control

我不是Subversion的新手,但到目前为止,我一直使用Tortoise而不是commadn系列。我的问题是,如何忽略来自ENTIRE源的所有文件,如* .o,而不仅仅是根。

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

如果svn propedit svn:忽略“。”在根目录中,并添加* .o,它将忽略myfile.o,但不会忽略/folder1/myfile2.o,/folder1/folder1.1/myfile3.o,/folder2/myfile4.o。有没有办法为整个项目添加* .o(我无法为整个存储库执行此操作,我知道可以完成,因为此项目位于包含许多其他项目的存储库中)?

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

3 个答案:

答案 0 :(得分:67)

修改

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

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

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

原始答案

您可以在“svn propset”中使用“-R”或“--recursive”选项,如以下命令所示:

svn propset svn:ignore '*.o' . --recursive

更多信息

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

svn help propset

答案 1 :(得分:39)

只是一个更新:Subversion 1.8.0引入了继承属性存储库Dictated配置(用于自动道具和忽略),在这种情况下也可以使用。

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

此新属性的设置与svn:ignore

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

Subversion 1.8.0 Release Notes提供了更多信息。

答案 2 :(得分: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当前目录及其每个子文件夹的.属性。