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

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


当前回答

在花了很多时间寻找如何做这个简单的活动后,我决定在帖子上找到一个像样的解释并不难。

首先让样本结构

$ SVN st ? 项目/箱子/目标 ? 项目/箱子/ myfile.x

1 -首先配置编辑器,在我的情况下vim 出口SVN_EDITOR = vim

2 -“svn propedit svn:ignore project/trunk/”将打开一个新文件,您可以在case类型“target”中添加您的文件和子目录保存并关闭文件和工作

$ SVN st ? 项目/箱子/ myfile.x

谢谢。

其他回答

杰森的回答会管用的。然而,与其在缓存目录上将svn:ignore设置为“。”,不如在父目录的svn:ignore属性中包含“cache”,以防缓存目录不总是存在。我在一些“一次性”文件夹上这样做。

如果项目目录名为/ project,缓存目录名为/ project / cache,则需要在/ project上设置subversion属性。属性名为“svn:ignore”,属性值为“Cache”。

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

"谢谢你" svn用如此丑陋,虚伪和难以忽视文件的方式。

所以我写了一个脚本svn-ignore-all:

#!/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; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

另外,为了忽略特定的文件/路径名列表,我们可以使用这个变体svn-ignore。我认为svn-ignore-all应该像xargs svn-ignore一样。

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

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

也要注意后面的斜杠。我发现在我的忽略设置文件中包含images/*不会忽略./images/。当我运行svn status -u时,它仍然显示?图像。我把忽略设置改成只有图像,没有斜杠。做了状态检查,清除了。

值得一提的是:

在命令行上不能使用

svn add *

这也将添加被忽略的文件,因为命令行展开*,因此svn add认为您希望添加所有文件。所以用这个代替:

svn add --force .