当我使用svn:ignore
从SVN中排除文件然后另一个人尝试提交排除的文件时, svn 阻止他?或者他必须在他的电脑里做同样的命令?
答案 0 :(得分:5)
想象一下,如果你有一堆Java文件(*.java
)。这些被编译成*.class
个文件。编译的*.class
文件不应存储在Subversion中。
现在,想象一个开发人员创建了一堆新的*.java
文件,编译它们,对结果感到满意,并且做到了这一点:
$ svn add *
在这种情况下,Subversion将快速添加所有已编译的*.class
文件。不是你想要的......
svn:ignore
属性位于您要忽略文件的目录中。如果且仅当文件尚未存在于Subversion中时,如果文件与文件上的svn:ignore
glob模式匹配,则文件将不会显示,并且用户执行svn status
或{{{ 1}}用外卡。
使用svn add
命令,这些文件不会在输出行的开头显示svn status
标记。如果用户尝试使用通配符添加,Subversion将忽略这些文件。
在上面的场景中,如果开发人员这样做了:
?
$ svn add *
属性将阻止添加svn:ignore
个文件。
但是,如果用户专门添加了被忽略的文件:
$ svn add foo.class
然后,Subversion不会忽略该文件。并且,一旦将其添加到存储库,Subversion将报告文件是否已更改或删除。
所有已签出该目录版本的用户都可以看到*.class
属性。这是防止意外添加文件的好方法,但它不能阻止某人实际添加它们。
我有pre-commit hook可以更进一步。有了它,您可以阻止用户将特定文件添加到存储库中。您还可以强制用户在创建新目录时设置svn:ignore
。
答案 1 :(得分:4)
当我使用svn:ignore从SVN中排除文件然后另一个人尝试提交排除的文件时,svn会阻止他吗?
不,svn:忽略只定义文件的模式,如果在WC内部未跟踪且存在,将从svn status
svn add *
<的输出中过滤掉/ p>
他必须在他的电脑里做同样的命令吗?
svn:ignore是文件夹的版本化属性,与其他版本化数据一起存储,在存储库中。如果您将此数据和其他方面更新自己的WC提交到此(或更高版本)修订版,则其WC中的文件夹将具有相同的svn:ignore属性设置
答案 2 :(得分:1)
ignore属性不会阻止任何人添加文件。在执行“svn status”之类的操作时,它只会阻止subversion列出与模式匹配的文件被列为“未知”。
但是,必须将其提交到存档才能被所有用户看到。