在某些情况下,作为开发环境设置的一部分,某些文件是使用默认设置分发的,并且这些文件已签入svn。但我们不希望用户意外地对这些文件进行本地修改。
svn有可能做到这一点吗?我知道svn:ignore对已经签入的文件不起作用。或者是否有不同的做法可以实现相同的结果?
答案 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
这允许所有用户创建新标记,但一旦创建标记,就不允许任何人提交标记。