如何忽略SVN目录?

Gil*_*ean 751 svn directory version-control

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

我在OS X和命令行上使用VersionsTextMate.

Jas*_*hen 790

设置svn:ignore父目录的属性:

svn propset svn:ignore dirname .
Run Code Online (Sandbox Code Playgroud)

如果您有多个要忽略的内容,请按属性值中的换行符分隔.在这种情况下,使用外部编辑器编辑属性值更容易:

svn propedit svn:ignore .
Run Code Online (Sandbox Code Playgroud)

  • 注意:如果目录已经在"in"svn中,这将不起作用.首先是`svn rm --keep-local dirname`.(我的svn stat输出很大,我把头撞到了这一段时间.) (153认同)
  • 如果要忽略多个文件/文件夹,请将所有名称添加到txt文件中,每行一行,并使用以下变体:`svn propset svn:ignore -F file.txt. (10认同)
  • 确保使用 `svn propget svn:ignore` 或 `svn propset svn:ignore dirname 来检查是否已经存在忽略的路径。` 将覆盖当前忽略的路径。最好使用`svn propedit svn:ignore .`。如果你已经覆盖了 svn:ignore 使用 `svn proplist -v <PATH>|<URL>` 来获取你的特定路径的当前值,然后通过复制/粘贴到 `svn propedit svn:ignore .` 来恢复它。 (6认同)
  • 谢谢你的回答.Pico作为编辑:svn propedit svn:忽略.--editor-cmd pico (4认同)
  • @Kouber:你的问题是shell扩展不知道svn:ignore属性.因此,使用'*'作为参数explicityl将tmp传递给commit命令.尝试类似'svn commit -m"更多口音"." (2认同)
  • 小心你像我一样设置`svn:ignore`而不是`svn :: ignore`.您可以设置任意属性,因此后者将设置为OK,您可以查看和编辑该属性,但不会使SVN忽略您列出的文件. (2认同)
  • 该属性已设置,但是当您执行 `svn st` 时它仍会被列出。有没有办法将它从状态列表中删除? (2认同)
  • @TomBrito 您仍然必须将该属性提交给 svn,这就是您在 svn 状态中看到它的原因。 (2认同)

cra*_*igb 406

这是一个示例目录结构:

\project
    \source
    \cache
    \other
Run Code Online (Sandbox Code Playgroud)

project您看到您的缓存目录未添加并显示为这样.

> svn st
M  source
?  cache
Run Code Online (Sandbox Code Playgroud)

要设置ignore属性,请执行

svn propset svn:忽略缓存.

svn:ignore您要设置的属性的名称在哪里,是属性cache的值,并且.是您要设置此属性的目录.它应该是cache需要该属性的目录的父目录.

要检查设置了哪些属性:

> svn proplist
Properties on '.':
  svn:ignore
Run Code Online (Sandbox Code Playgroud)

要查看以下内容的价值svn:ignore:

> svn propget svn:ignore
cache
Run Code Online (Sandbox Code Playgroud)

要删除先前设置的属性:

svn propdel svn:ignore
Run Code Online (Sandbox Code Playgroud)

  • 这里有一个棘手的问题,我偶然发现了.确保你没有向`dirname`添加一个尾部斜杠.例如,当键入`svn propset svn:ignore dirname`时,如果允许(bash)shell为你填写dirname,它将添加该尾部斜杠,让你使用命令`svn propset svn:ignore dirname/`,这不会导致文件夹被忽略.至少,那是我的经历. (16认同)
  • 'cache'目录仍将列在'svn st'中.有没有办法从视图中删除吗?(不删除从磁盘) (4认同)

bin*_*nco 130

重要提一下:

在命令行上你不能使用

svn add *
Run Code Online (Sandbox Code Playgroud)

这也将添加被忽略的文件,因为命令行扩展*,因此svn add认为您希望添加所有文件.因此请改用:

svn add --force .
Run Code Online (Sandbox Code Playgroud)


Kai*_*Kai 80

由于我花了一段时间试图让它工作,应该注意的是,如果文件已经存在于SVN中,则需要svn delete它们,然后编辑svn:ignore属性.

我知道这似乎很明显,但是当我认为它会在本地忽略它们时,它们会一直显示?在我的svn status列表中.

  • 如果您只是想忽略它们而不是实际删除它们,请不要忘记在删除文件时使用--keep-local选项. (8认同)

Gre*_*reg 70

要略微扩展,如果您使用svn命令行工具执行此操作,则需要键入:

svn propedit svn:ignore path/to/dir
Run Code Online (Sandbox Code Playgroud)

这将打开您选择的文本编辑器,然后键入'*'忽略其中的所有内容,并保存+退出 - 这将包括svn中的目录本身,但忽略其中的所有文件,忽略该目录,使用父路径,然后键入文件中的目录名称.保存后,运行更新('svn up'),然后检查相应的路径.

  • 非常好点,谢谢.所有其他答案错过了嵌套目录的情况.所以上面的例子(工作)然后输入编辑器ignored_directory(假设在path/to/dir下面一级).这不会起作用:svn propedit svn:ignore.然后在编辑器中键入path/to/dir/ignored_directory.IOW:SVN一次将对象降低一级. (8认同)

Fra*_*rba 29

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

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Run Code Online (Sandbox Code Playgroud)

这将覆盖任何当前值svn:ignore.您可以使用以下命令编辑值:

$ svn pe svn:ignore .
Run Code Online (Sandbox Code Playgroud)

哪个会打开你的编辑器.您可以添加多个模式,每行一个.

您可以使用以下方法查看当前值:

$ svn pg svn:ignore .
Run Code Online (Sandbox Code Playgroud)

如果您使用的是GUI,则应该有一个菜单选项来执行此操作.

  • `svn ps svn:忽略."cachedir"导致"cachedir不受版本控制".改为`svn ps svn:忽略'cachedir'.`为我工作 (3认同)

Ell*_*Yap 21

感谢上面的所有贡献.我想在忽略文件的同时从我的经验中分享一些额外的信息.


当文件夹已经在版本控制下

svn导入svn co文件后,我们通常第一次做什么.

所有运行时缓存,附件文件夹都将受版本控制.所以,在svn ps svn:ignore之前,我们需要从存储库中删除它.

我们可以使用上面的SVN 1.5版svn del --keep-local your_folder,但对于早期版本,我的解决方案是:

  1. svn导出文件夹的干净副本(没有.svn隐藏文件夹)
  2. svn del the local和repository,
  3. svn ci
  4. 复制文件夹
  5. SVN ST和确认文件夹被标记为"?"
  6. 现在我们可以根据解决方案做svn ps

当我们需要忽略多个文件夹时

  • 在一个目录中,我有两个需要设置为的文件夹 svn:ignore
  • 如果我们设置一个,另一个将被删除.
  • 然后我们想知道我们需要svn pe

svn pe将需要编辑文本文件,如果需要使用vi设置文本编辑器,则可以使用此命令:

export SVN_EDITOR=vi
Run Code Online (Sandbox Code Playgroud)
  1. 使用"o",您可以打开一个新行
  2. 键入要忽略的所有文件夹名称
  3. 点击'esc'键退出编辑模式
  4. 输入":wq"然后点击Enter保存并退出

该文件看起来像这样:

runtime
cache
attachments
assets
Run Code Online (Sandbox Code Playgroud)


mat*_*rns 20

首先删除它...

如果您的目录foo已经受版本控制,请先删除它:

svn rm --keep-local foo
Run Code Online (Sandbox Code Playgroud)

......然后忽略:

svn propset svn:ignore foo .
Run Code Online (Sandbox Code Playgroud)


Mic*_*ang 12

如果您使用特定的SVN客户端TortoiseSVN,那么在提交时,您可以选择右键单击项目并选择"添加到忽略列表".


Der*_*ike 12

...如果你想忽略多个目录(例如build/ temp/*.tmp文件),你可以分两步完成(忽略第一个和编辑忽略属性(参见其他答案)或者可以写一些像

svn propset svn:ignore "build
temp
*.tmp" .
Run Code Online (Sandbox Code Playgroud)

在命令行上.


小智 8

忽略多个条目的命令有点棘手,需要反斜杠.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
Run Code Online (Sandbox Code Playgroud)

此命令会忽略任何名字cache,tmp,null,和and_so_on在当前目录.

  • 而且只是为了澄清:这里的反斜杠不是svn的特征; 它只是一种在shell上输入多行字符串的方法.您也可以使用编辑器,只需编写多行. (5认同)
  • `svn propset svn:ignore -F .ignorethesefiles .` 将允许您使用文件。正如前面提到的,你总是有优势。 (2认同)

Fed*_*TIK 6

用于多次忽略的 Bash oneliner:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Run Code Online (Sandbox Code Playgroud)


小智 5

我有问题让嵌套目录被忽略; 我想忽略的顶级目录不会显示'svn status'但所有子目录都显示.这对其他人来说可能是不言而喻的,但我想我会分享它:

例:

/树干

/主干/缓存

/主干/缓存/ subdir1

/主干/缓存/ subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
Run Code Online (Sandbox Code Playgroud)