如何使用SVN忽略目录?

时间:2020-03-06 14:33:03  来源:igfitidea点击:

我刚刚开始使用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" .

在命令行上。