在颠覆中递归地忽略整个源代码树中的文件
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帮助道具【讨论】:
谢谢,效果很好!我仍然了解他们的文档。正如我所说,到目前为止,我只使用过乌龟,这给了你很好的对话框和解释:)。 你还有 --forcesvn propset svn:ignore "*.pdb *.db" c:\portal\ --recursive --force
接受的答案将清除所有其他 svn:ignore 设置(如果您拥有它们)。然后你可能想要***.com/questions/3086418/…
我想支持 hackmaster 的警告,并感谢他提供的链接解决方案。仅供参考,我选择了位于 ~/.subversion/config 中的全局配置解决方案
hackmaster 的评论应该固定在这个帖子的顶部。包含破坏存储库(至少是其中的某些部分)的说明的“已接受答案”不是一件好事;)【参考方案2】:
只是一个更新:Subversion 1.8.0 引入了 Inherited Properties 和 Repository 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以上是关于在颠覆中递归地忽略整个源代码树中的文件的主要内容,如果未能解决你的问题,请参考以下文章