2009-01-06 95 views
10

今天我遇到了一个问题,有人意外地提交了一个proj.user文件到SVN仓库。当我来更新时,显然会引起问题。有什么办法阻止文件提交到SVN仓库

它让我想知道是否有任何方法可以阻止某些文件扩展名被提交到存储库。

我意识到有一个忽略列表,但据我所知,这仍然依赖于人添加文件忽略列表。理想情况下,我想集中控制这一点,以便存储库而不是个人拥有控制权。

这可能吗?

回答

16

是,一般有两种方法。要么创建提交挂钩(这可能不是你想要做的),或者更简单的,将svn:ignore属性添加到你的目录中。由于属性与项目一起维护,这会影响每个人。例如,忽略*.user文件,你可以添加这对他们会出现在目录:

svn propset svn:ignore '*.user' . 

然后提交你的变化如常。从现在起,该目录中的* .user文件将不再参与svn命令,例如stat,update,commit等等。但是,您必须将该属性添加到需要忽略字段的每个目录。它不会自动在您的项目树上进行递归操作。如果出于任何原因,您确实想要更新忽略的文件,则可以将--no-ignores标志传递给该命令。

+0

这实际上是否会避免显式地'$ svn add``ed? – matpie 2009-01-06 18:14:56

+0

不,如果您专门添加它,它将被添加,但更新将被忽略。 – 2009-01-06 20:08:16

0

在SVN中,您手动将文件添加到存储库。因此,有一个文件扩展名块列表是没有意义的。你可以使用svn ignore来忽略特定的文件,但是你也可以手动添加和删除存储库中的文件。

又见How do you remove a file from being version controlled without deleting the file in subversion?

+0

svn实际上并没有忽略命令......所以svn ignore只会导致错误。 – 2009-01-06 12:32:35

+1

svn:忽略不是一个命令,它是一个属性:http://svnbook.red-bean.com/en/1.1/ch07s02.html – 2009-01-06 12:38:43

3

你可能会添加一个subversion pre-commit hook来防止他人提交。这具有服务器端的优势,而不是每个客户端的设置。

+1

Subversion属性也可以通过项目进行管理,因此它们可以在修改以及在服务器上进行维护的情况下受益:)并且不需要编码。 – 2009-01-06 12:41:21

0

除了设置ignore property之外,还可以使用“global-ignore”运行时配置选项全局执行此操作。按照链接了解更多信息。我认为全球忽视功能就是您可能需要的功能。

2

对此:

请问这实际上阻止它明确$ SVN add'ed是 ? - sirlancelot 1月6日09时18:14

不,如果你特别添加它,它 将被添加,但更新会 被忽略。 - 杰森·科科2009年1月6日在 20:08

我相信你不能这样玩svn:忽略道具。根据svnbook 1。5手册:

“Subversion的用于忽略 文件模式支持仅延伸到添加未版本控制 文件和目录版本 控制的 一次性过程一旦对象是下 Subversion的控制中,忽略 模式机制不再适用于 它。换句话说,不要指望 颠覆以避免犯 你已经到了一个版本文件所做的只是 因为该文件的名称相匹配的 忽略模式,颠覆总是 变化注意到它的所有版本化对象。“

2

我不得不使用

svn propset svn:ignore '*.user' . 

为了使用上述接受的答案。