如何让SVN忽略Mac“._”文件?

时间:2011-02-28 16:10:24

标签: svn

我的开发服务器被几个OSX用户访问,他们的操作系统往往会在这个地方留下许多不必要的文件,所有文件都以点下划线(“._”)开头。我知道可以告诉OSX不要在网络驱动器上创建它们,但它们仍然潜入。我希望SVN忽略以“._”开头的任何内容,但我似乎无法让它工作,即使它看起来应该很简单。我已将“._*”添加到SVN全局忽略模式,但SVN仍在尝试添加和提交这些文件。谁能告诉我我做错了什么?我的完整SVN忽略模式是:

global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store Thumbs.db ._* *.bak *.tmp nbproject

我不知道它是否有任何区别,但我试图通过编辑/ etc / subversion / config文件在Ubuntu和Ubuntu服务器上设置它。

6 个答案:

答案 0 :(得分:11)

我有pre-commit hook可能适合这个帐单。此挂钩允许您完全禁止基于正则表达式使用某些文件名。您可以禁止以“._”开头的任何文件,如果有人试图添加一个文件,他们将无法提交。

由于拥有“._”文件而遭到一些拒绝提交后,开发人员将更新其global-ignores以包含这些文件。

您无法为所有用户设置global-ignores,但此预提交挂钩会鼓励您的用户自行设置。

它的工作原理与电插座如何阻止用户将叉子插入其中的原理相同。在第三次或第四次之后,即使是最顽固的开发人员也会知道这不是一个好主意。

答案 1 :(得分:3)

您还可以使用设置svn:ignore属性并向其添加“._ *”和其他所需值。然后,忽略值位于存储库和每个工作副本中,而不是特定于计算机的配置中。但是,svn:ignore和全局忽略列表都可以被规避。

确保您使用的“svn add”形式尊重svn:ignore和全局忽略列表。

以下摘自svn docs(重点强调):

  

即使设置了svn:ignore,也可以运行   如果你使用shell进入问题   命令中的通配符。贝壳   通配符扩展为   明确的目标列表   Subversion对它们进行操作,所以   运行svn SUBCOMMAND *就像   运行svn SUBCOMMAND file1 file2   file3 ....在svn add的情况下   命令,这有一个类似的效果   传递--no-ignore选项。所以   而不是使用通配符,使用svn   添加--force。进行批量调度   未加用的东西用于添加。   明确的目标将确保   目前的目录不容忽视   因为已经在版本之下   控制, - force选项将   导致Subversion爬过它   目录,添加无版本文件   同时仍然尊重svn:忽略   属性和全局忽略运行时   配置变量。务必   还提供了--depth files选项   如果不这样做,请输入svn add命令   想要完全递归爬行   要添加的东西。

如何测试您的忽略列表是否正常工作

svn status

如果它没有显示,并且没有版本化,则会被正确忽略。

除非正确忽略并且总是正确地使用添加,所以提到的@David W.之前的提交钩子可能是最后/唯一的总防御......

答案 2 :(得分:1)

Subversion使用fnmatch()函数进行忽略。所以你必须使用该函数的pattern matching notation

您发布的忽略部分应该有效。您确定要将其设置在正确的配置文件中吗?有multiple locations,其中svn从那里读取。

  

在类Unix系统上,此区域显示为用户主目录中名为.subversion的目录。   除了每用户配置区域,Subversion还可识别系统范围配置区域的存在。 [..]在类Unix平台上,系统范围的配置区域应该是/ etc / subversion目录;

答案 3 :(得分:0)

是不是将文件添加到SVN本地操作?在这种情况下,用户特定的设置应忽略文件。

答案 4 :(得分:0)

获取._ *文件是正常的,因为开发人员直接在服务器上工作,所以._文件在编辑文件时直接生成。

他们应该在他们的本地机器上获取工作副本(请参阅Subversion文档以了解如何从samba服务器执行此操作),然后忽略模式(在每台机器上设置)将阻止他们在他们添加._ *文件时承诺。换句话说,这些文件将“留在他们的机器上”。

答案 5 :(得分:0)

你能创建一个客户端钩子来递归删除._ *文件吗?

我的bash shell中有一个别名,用于删除所有.DS_Store文件夹,将其连接到Subversion是我应该研究的内容......