我的开发服务器被几个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服务器上设置它。
答案 0 :(得分:11)
我有pre-commit hook可能适合这个帐单。此挂钩允许您完全禁止基于正则表达式使用某些文件名。您可以禁止以“._”开头的任何文件,如果有人试图添加一个文件,他们将无法提交。
由于拥有“._”文件而遭到一些拒绝提交后,开发人员将更新其global-ignores
以包含这些文件。
您无法为所有用户设置global-ignores
,但此预提交挂钩会鼓励您的用户自行设置。
它的工作原理与电插座如何阻止用户将叉子插入其中的原理相同。在第三次或第四次之后,即使是最顽固的开发人员也会知道这不是一个好主意。
答案 1 :(得分:3)
您还可以使用设置svn:ignore属性并向其添加“._ *”和其他所需值。然后,忽略值位于存储库和每个工作副本中,而不是特定于计算机的配置中。但是,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是我应该研究的内容......