如何在SVN中忽略一个目录?

11 浏览
0 Comments

如何在SVN中忽略一个目录?

我刚开始使用SVN,我有一个不需要放在源代码控制下的缓存目录。如何在SVN中忽略整个目录/文件夹?

我在OS X上使用VersionsTextMate以及命令行。

0
0 Comments

有时候我们在使用SVN时需要忽略某些文件夹,但是却发现这些文件夹依然会在svn status中显示出来。下面是一个例子的目录结构:

\project

\source

\cache

\other

当我们在project目录中运行svn status时,会发现cache文件夹并没有添加进版本控制中,显示如下:

> svn status

M source

? cache

要设置忽略属性,可以运行以下命令:

svn propset svn:ignore cache .

其中svn:ignore是要设置的属性名称,cache是属性的值,而.则是要设置属性的目录。这里需要注意的是,.应该是cache目录的父目录,而不是cache目录本身。

想要查看已设置的属性,可以运行以下命令:

> svn proplist

会显示:

Properties on '.':

svn:ignore

想要查看svn:ignore的值,可以运行以下命令:

> svn propget svn:ignore

会显示:

cache

如果想要删除之前设置的属性,可以运行以下命令:

svn propdel svn:ignore

在这里有一个我曾经遇到的棘手问题。一定要注意不要在dirname后面添加斜杠。例如,当输入svn propset svn:ignore dirname时,如果允许(bash)shell为你填写dirname,它会添加斜杠,导致你运行的命令变成svn propset svn:ignore dirname/,这样就无法忽略该文件夹了。至少,这是我的经验。

然而,即使设置了忽略属性,cache文件夹仍然会在svn st中列出。有没有办法将其从显示中移除呢?(而不是从磁盘上删除)

0
0 Comments

如何在SVN中忽略一个目录?

在父目录中设置svn:ignore属性:

svn propset svn:ignore dirname .

如果有多个要忽略的项目,可以在属性值中用换行符分隔。在这种情况下,可以使用外部编辑器更容易地编辑属性值:

svn propedit svn:ignore .

但是这并没有按预期工作。tipi:/var/www/tipi# svn commit -m "More accents" * svn: '/var/www/tipi/tmp' is not a working copy svn: Can't open file '/var/www/tipi/tmp/.svn/entries': No such file or directory tipi:/var/www/tipi# svn propset svn:ignore tmp . property 'svn:ignore' set on '.' tipi:/var/www/tipi# svn commit -m "More accents" * svn: '/var/www/tipi/tmp' is not a working copy svn: Can't open file '/var/www/tipi/tmp/.svn/entries': No such file or directory

: 你的问题是shell扩展不知道svn:ignore属性。因此,使用'*'作为参数会将tmp明确传递给commit命令。尝试类似这样的命令:'svn commit -m "More accents" .'

感谢答案。使用Pico作为编辑器:svn propedit svn:ignore . --editor-cmd pico

注意:如果目录已经在svn中,这个方法不起作用。先使用svn rm --keep-local dirname。我的svn stat输出非常大,我被这个问题困扰了一段时间。

如果你想忽略多个文件/文件夹,将它们的名称添加到一个txt文件中,每行一个,并使用以下变体:svn propset svn:ignore -F file.txt .

注意要设置svn:ignore而不是svn::ignore,像我一样。你可以设置任意属性,所以后者会被正确设置,你可以看到并编辑属性,但它不会使SVN忽略你列出的文件。

rm --keep-local在许多情况下都可以正常工作,但如果它是一个不应该从其他检出中删除的文件夹,则不适用。有关解决此问题的解决方案,请参见stackoverflow.com/a/6882073/560114

属性已经设置,但是在执行svn st时仍然会列出它。有没有办法从状态列表中删除它?

你仍然需要将属性提交到svn中,这就是为什么你在svn status中看到它的原因。

在WANdisco的SVN客户端中,语法是svn propset svn ignore dirname,所以这里没有:

在mac osx上可能会出现错误。"The document “svn-prop.tmp” could not be opened. The file doesn’t exist."。解决方案请参见stackoverflow.com/questions/7384717/…

是否可以全局设置?

只有版本1.8才支持(svn-to-ignore-files-and-directories)[superchlorine.com/2013/08/…

如果使用svn propedit svn:ignore .时出现None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found的错误,请输入export SVN_EDITOR=vim,然后重试。

请确保检查是否已经忽略了路径,可以使用svn propget svn:ignoresvn propset svn:ignore dirname .来检查当前已忽略的路径。最好使用svn propedit svn:ignore .。如果已经覆盖了svn:ignore,请使用svn proplist -v <PATH>|<URL>获取特定路径的当前值,然后通过复制/粘贴到svn propedit svn:ignore .来还原。

0
0 Comments

在使用SVN时,有时候我们希望忽略某个目录,不将其加入版本控制。但是,直接使用svn add *命令会将被忽略的文件也加入版本控制,因为通配符*会被命令行展开,导致svn add误以为你想要添加所有文件。因此,我们需要使用svn add --force .命令来代替。

需要注意的是,svn add --force *命令是不起作用的,你应该使用点号.而不是星号*

所以,解决这个问题的方法是使用svn add --force .命令来将文件添加到版本控制,同时忽略被设定为忽略的目录。

0