如何在SVN中忽略一个目录?
有时候我们在使用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中列出。有没有办法将其从显示中移除呢?(而不是从磁盘上删除)
如何在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:ignore
或svn propset svn:ignore dirname .
来检查当前已忽略的路径。最好使用svn propedit svn:ignore .
。如果已经覆盖了svn:ignore,请使用svn proplist -v <PATH>|<URL>
获取特定路径的当前值,然后通过复制/粘贴到svn propedit svn:ignore .
来还原。