如何忽略带有SVN的目录?

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

我在OS X和命令行上使用版本TextMate

605960 次浏览

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

svn propset svn:ignore dirname .

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

svn propedit svn:ignore .

设置svn:忽略财产。大多数UI svn工具都有办法做到这一点,以及链接中的命令行讨论。

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

svn propedit svn:ignore path/to/dir

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

如果您正在使用像TortoiseSVN这样的SVN前端,或者某种IDE集成,那么在与提交/添加操作相同的菜单中也应该有一个忽略选项。

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

如果你的项目目录命名为 /Project,缓存目录命名为 /Project/Cache,那么你需要在 /Project.上设置一个subversion属性,属性名称应该是“svn:忽略”,属性值应该是“Cache”。

有关属性的更多信息,请参阅Subversion手册中的这个页。

Jason的回答可以解决这个问题。但是,您可能希望在父母目录的svn:忽略属性中包含“缓存”,而不是在缓存目录中设置“.”,以防缓存目录并不总是存在。我在许多“一次性”文件夹上这样做。

在父目录上设置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 statusM  source?  cache

要设置忽略属性,请执行

svn设置svn:忽略缓存。

其中svn:ignore是您要设置的属性的名称,cache是属性的值,.是您要设置此属性的目录。它应该是需要该属性的cache目录的父目录。

检查设置了哪些属性:

> svn proplistProperties on '.':svn:ignore

要查看svn:ignore的值:

> svn propget svn:ignorecache

要删除先前设置的属性:

svn propdel svn:ignore

值得一提的是:

在你不能使用的命令线上

svn add *

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

svn add --force .

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

我知道这看起来很明显,但它们一直在我的svn status列表中显示为?,当我认为它会在本地忽略它们时。

我在忽略嵌套目录时遇到了问题;我想忽略的顶部目录不会显示“svn状态”,但所有子目录都显示了。这对其他人来说可能是不言自明的,但我想我会分享它:

示例:

/trunk

/trunk/cache

/trunk/cache/subdir1

/trunk/cache/subdir2

cd /trunksvn ps svn:ignore . /cachecd /trunk/cachesvn ps svn:ignore . *svn ci

…如果您想忽略多个目录(例如build/temp/*.tmp文件),您可以分两步完成(忽略第一个并编辑忽略属性(请参阅此处的其他答案)),或者可以编写类似

svn propset svn:ignore "buildtemp*.tmp" .

在命令行上。

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

svn propset svn:ignore "cache\tmp\null\and_so_on" .

此命令将忽略当前目录中名为cachetmpnulland_so_on的任何内容。

多个忽略的Bash oneliner:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

感谢以上所有的贡献。我只是想分享一些额外的信息,从我的经验,而忽略文件。


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

svn导入svn公司文件之后,我们通常第一次做什么。

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

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

  1. svn导出文件夹的干净副本(没有.svn隐藏文件夹)
  2. svndel本地和存储库,
  3. svnci
  4. 复制回文件夹
  5. svnst并确认文件夹被标记为'?'
  6. 现在我们可以根据解决方案做svnps

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

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

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

export SVN_EDITOR=vi
  1. 用“o”你可以打开一条新线
  2. 输入您要忽略的所有文件夹名称
  3. 点击'esc'键从编辑模式中退出
  4. 键入“: wq”然后点击输入保存并退出

该文件看起来很简单,如下所示:

runtimecacheattachmentsassets

由于您使用的版本实际上很容易:

  • 浏览您的签出副本
  • 单击要忽略的目录
  • 在“忽略”框中,右键单击“编辑”
  • 键入*.*忽略所有文件(或*. jpg仅用于jpg文件等)

也注意你的尾随斜杠。我发现在我的忽略设置文件中包含images/*并没有忽略./images/。当我运行svn status -u时,它仍然显示? images。所以,我只是将忽略设置更改为images,没有斜杠。运行状态检查并将其清除。

先拿掉它…

如果您的目录foo已经处于版本控制之下,请首先使用以下命令将其删除:

svn rm --keep-local foo

…然后忽略:

svn propset svn:ignore foo .

“谢谢你” svn为这样一个丑陋,虚假和困难的方式来忽略文件。

所以我写了一个脚本是否忽略所有svn

#!/bin/sh
# svn-ignore-all
# usage:#   1. run svn status to see what is going on at each step#   2. add or commit all files that you DO want to have in svn#   3. remove any random files that you don't want to svn:ignore#   4. run this script to svn:ignore everything marked '?' in output of `svn status`
svn status |grep '^?' |sed 's/^? *//' |while read f; dod=`dirname "$f"`b=`basename "$f"`ignore=`svn propget svn:ignore "$d"`if [ -n "$ignore" ]; thenignore="$ignore"fiignore="$ignore$b"svn propset svn:ignore "$ignore" "$d"done

此外,要忽略特定的文件/路径名列表,我们可以使用这个变体svn是否忽略。我想svn-neoly-all应该真的像xargs svn-的一样。

#!/bin/sh
# svn-ignore
# usage:#   svn-ignore file/to/ignore ...
for f; dod=`dirname "$f"`b=`basename "$f"`ignore=`svn propget svn:ignore "$d"`if [ -n "$ignore" ]; thenignore="$ignore"fiignore="$ignore$b"svn propset svn:ignore "$ignore" "$d"done

还有一件事:我倾向于用许多随机文件污染我的svn签出。当提交的时候,我将这些文件移动到一个“旧”子目录中,并告诉svn忽略“旧”。

失去了很多时间寻找如何做这个简单的活动后,我决定张贴它不难找到一个像样的解释。

首先让样本结构

$svn st?项目/主干/目标?项目/主干/myfile. x

1-首先在mycase vim中配置编辑器导出SVN_EDITOR=vim

2-“svn propedit svn:忽略项目/主干/”将打开一个新文件,您可以在我们的案例中添加您的文件和子目录类型“目标”保存并关闭文件并工作

$svn st?项目/主干/myfile. x

谢了

要保留SVN将忽略的目录:

  1. 这将从存储库中删除文件,但将目录保持在SVN控制之下:

#删除本地路径directory_to_keep/*

  1. 然后设置为忽略目录(和所有内容):

svn proset svn:忽略"*"路径/directory_to_keep