如何使用SVN忽略目录?
我刚刚开始使用SVN,并且有一个缓存目录,该目录在源代码控制下不需要。如何使用SVN忽略整个目录/文件夹?
我在OSX和命令行上使用Versions和TextMate。
解决方案
设置父目录的svn:ignore
属性:
svn propset svn:ignore dirname .
如果我们有许多事情要忽略,请在属性值中用换行符分隔。在这种情况下,使用外部编辑器更容易编辑属性值:
svn propedit svn:ignore .
设置svn:ignore属性。大多数UI svn工具都有执行此操作的方法以及链接中的命令行讨论。
要稍微扩展一下,如果我们使用svn命令行工具执行此操作,则需要输入:
svn propedit svn:ignore path/to/dir
这将打开我们选择的文本编辑器,然后键入" *"以忽略其中的所有内容,然后保存并退出,这将在svn中包括目录本身,但忽略其中的所有文件,以忽略目录,请使用路径,然后在文件中键入目录的名称。保存后,运行更新(" svn up"),然后检查适当的路径。
如果我们使用的是诸如TortoiseSVN之类的SVN前端,或者某种IDE集成,则在与提交/添加操作相同的菜单中也应该有一个ignore选项。
如果使用特定的SVN客户端TortoiseSVN,则在提交时,可以选择右键单击项目,然后选择"添加到忽略列表"。
如果项目目录名为/ Project,而缓存目录名为/ Project / Cache,则需要在/ Project上设置一个subversion属性。属性名称应为" svn:ignore",属性值应为" Cache"。
有关属性的更多信息,请参见Subversion手册中的此页面。
杰森的答案将解决问题。但是,不要将svn:ignore设置为""。在高速缓存目录上,如果高速缓存目录并不总是存在,则可能需要在父目录的svn:ignore属性中包括" cache"。我在许多"可丢弃"文件夹中执行此操作。
在父目录上设置svn:ignore
属性:
$ cd parentdir $ svn ps svn:ignore . 'cachedir'
这将覆盖svn:ignore的任何当前值。我们使用以下命令编辑值:
$ svn pe svn:ignore .
这将打开编辑器。我们可以添加多个模式,每行一个。
我们可以使用以下方法查看当前值:
$ svn pg svn:ignore .
如果我们使用的是GUI,则应该有一个菜单选项来执行此操作。
这是一个示例目录结构:
\project \source \cache \other
在project
中时,我们会看到未添加缓存目录,并以这种方式显示。
> svn st M source ? cache
要设置ignore属性,请执行
svn propset svn:ignore cache .
其中" svn:ignore"是我们要设置的属性的名称," cache"是该属性的值,而"。"是我们要设置此属性的目录。它应该是需要该属性的cache
目录的父目录。
要检查设置了哪些属性:
> svn proplist Properties on '.': svn:ignore
查看svn:ignore
的值:
> svn propget svn:ignore cache
要删除先前设置的属性:
svn propdel svn:ignore
重要提示:
在命令行上,我们不能使用
svn add *
这也会添加被忽略的文件,因为命令行会扩展*
,因此svn add
认为我们希望添加所有文件。因此,请改用此方法:
svn add --force .
由于我花了一段时间尝试使其工作,因此应注意,如果文件已经存在于SVN中,则需要" svn delete"它们,然后编辑" svn:ignore"属性。
我知道这似乎很明显,但是当我认为它只会在本地忽略它们时,它们在我的" svn status"列表中一直显示为"?"。
我在使嵌套目录被忽略方面遇到问题;我想忽略的顶层目录不会显示为'svn status',但是所有子目录都显示。这可能对其他所有人都是不言而喻的,但我想我会分享的:
例子:
/trunk /trunk/cache /trunk/cache/subdir1 /trunk/cache/subdir2
cd /trunk svn ps svn:ignore . /cache cd /trunk/cache svn ps svn:ignore . * svn ci
...并且如果我们想忽略多个目录(例如,build /temp /
和* .tmp
文件),则可以分两步进行(忽略第一步,然后编辑ignore属性(请参见其他答案在这里)或者一个人可以写类似的东西
svn propset svn:ignore "build temp *.tmp" .
在命令行上。