svn忽略对svn保存/跟踪的文件的更改

时间:2012-02-07 17:37:45

标签: svn

在某些情况下,作为开发环境设置的一部分,某些文件是使用默认设置分发的,并且这些文件已签入svn。但我们不希望用户意外地对这些文件进行本地修改。

svn有可能做到这一点吗?我知道svn:ignore对已经签入的文件不起作用。或者是否有不同的做法可以实现相同的结果?

4 个答案:

答案 0 :(得分:4)

这取决于您使用的客户端。例如,乌龟有Changelists。您可以将文件放在ignore-on-commit更改列表中,默认情况下,当您签入代码时,它们不会被勾选。 Smart SVN等其他客户端具有类似的功能。

答案 1 :(得分:4)

通常的方法是完全省略这样的文件(通过svn:ignore)并改为提交模板。用户需要复制模板并根据自己的喜好调整副本:

http://subversion.apache.org/faq.html#ignore-commit

  

我的项目中有一个文件,每个开发人员都必须更改,但我不希望提交这些本地mod。如何使'svn commit'忽略该文件?

     

答案是:不要将该文件置于版本控制之下。相反,放   版本控制下的文件模板,如   “file.tmpl”。

     

然后,在最初的'svn checkout'之后,让你的用户(或你的构建   system)将模板的正常OS副本写入正确的文件名,   并让用户自定义副本。该文件是无版本的,所以它会   从不承诺。如果您愿意,可以将文件添加到其中   父目录的svn:ignore属性,因此它不会显示为'?'   在'svn status'命令中。

答案 2 :(得分:1)

现在有人来到这里,答案是here on stackoverflow

svn changelist ignore-on-commit file-you-want-to-add

答案 3 :(得分:0)

使用我的pre-commit hook。您可以指定具有特定文件的提交权限的单个文件级别。例如,您可以在控制文件中执行此操作:

[file You are not allowed to modify template files]

file = /**/*.template
access = read-only
users = @ALL

[file Bob is allowed to change the templates]

file = /**/*.template
access = read-write
users = bob

现在,用户将无法在系统的任何位置修改模板文件(即假设它们以后缀模板结尾),但聪明又漂亮的Bob可以修改需要时模板文件。

我最初写了这个预提交钩子,允许用户创建,但不能修改标签:

[file You can't modify a tag]
file = /tag/**
access = read-only
users = @ALL

[file You can't modify a tag]
file = /tag/*
access = add-only
users = @ALL

这允许所有用户创建新标记,但一旦创建标记,就不允许任何人提交标记。