我刚开始使用SVN,在源代码控制下有一个不需要的缓存目录。如何忽略SVN的整个目录/文件夹?
我在OS X和命令行上使用版本和TextMate。
我刚开始使用SVN,在源代码控制下有一个不需要的缓存目录。如何忽略SVN的整个目录/文件夹?
我在OS X和命令行上使用版本和TextMate。
当前回答
"谢谢你" 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”。
其他回答
感谢以上所有的贡献。我只是想分享一些额外的信息,从我的经验忽略文件。
当文件夹已经处于修订控制之下时
在svn导入和svn co文件后,我们通常第一次做什么。
所有运行时缓存、附件文件夹都将受到版本控制。 因此,在SVN ps SVN:ignore之前,我们需要从存储库中删除它。
在SVN 1.5版本以上,我们可以使用SVN del——keep-local your_folder, 但对于早期版本,我的解决方案是:
SVN导出文件夹的干净副本(没有.svn隐藏文件夹) SVN del本地和存储库, svn ci 复制文件夹 是否svn st并确认文件夹被标记为“?” 现在我们可以根据解做svn ps了
当我们需要忽略多个文件夹时
在一个目录下,我有两个文件夹需要设置为svn:ignore 如果我们设置了一个,另一个就会被移除。 然后我们想知道我们是否需要svn
SVN PE需要编辑文本文件,如果需要设置文本编辑器,可以使用该命令:
export SVN_EDITOR=vi
用“o”你可以打开一个新的行 输入要忽略的所有文件夹名称 按“esc”键退出编辑模式 输入“:wq”,然后按Enter键保存并退出
该文件看起来就像这样:
runtime
cache
attachments
assets
为了稍微扩展一下,如果您使用svn命令行工具执行此操作,您需要键入:
svn propedit svn:ignore path/to/dir
这将打开您选择的文本编辑器,然后键入'*'以忽略其中的所有内容,并保存+quit -这将包括svn中的目录本身,但忽略其中的所有文件,忽略目录,使用父目录的路径,然后在文件中键入目录的名称。保存后,运行更新('svn up'),然后检入相应的路径。
下面是一个目录结构示例:
\project
\source
\cache
\other
当在项目中,您看到您的缓存目录没有添加,并显示为这样。
> svn status
M source
? cache
若要设置ignore属性,请执行
SVN propset SVN:ignore cache。
其中svn:ignore是您正在设置的属性的名称,cache是属性的值,以及。是要设置此属性的目录。它应该是需要该属性的缓存目录的父目录。
检查设置了哪些属性:
> svn proplist
Properties on '.':
svn:ignore
查看svn的值:ignore:
> svn propget svn:ignore
cache
删除先前设置的属性。
svn propdel svn:ignore
也要注意后面的斜杠。我发现在我的忽略设置文件中包含images/*不会忽略./images/。当我运行svn status -u时,它仍然显示?图像。我把忽略设置改成只有图像,没有斜杠。做了状态检查,清除了。
我有问题得到嵌套目录被忽略;我想忽略的顶部目录不会显示“svn status”,但所有的subdirs都显示了。这对其他人来说可能是不言而喻的,但我想分享一下:
例子:
/树干 /中继/缓存 /trunk/cache/subdir1 /trunk/cache/subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci