2012-05-18 52 views
4

我有一个涉及许多子目录的大目录树。在许多目录中,我使用了svn propedit svn:ignore .,并忽略了给定目录中的文件和/或目录。现在,我想忽略的是,在的所有子目录中都有名为foo的目录。在this answer,建议调用:将目录追加到SVN中的忽略列表

svn propset --recursive svn:ignore foo . 

从树的根。问题是,一旦调用它,它会覆盖各个子目录中的所有预定义的忽略 - 这是不希望的。基本上我想追加到树中每个目录的忽略列表中,其中有条目fooSVN是否支持这种操作?如果不是,那么我正在考虑编写此任务的脚本,并将其添加到每个./sub/directory/.svn(其中.是树的根目录)所需的行中的文件dir-prop-base(似乎包含忽略列表)。 这样做是否安全?,即手动乱用.svn的内容?

回答

6

我建议使用bash脚本完成此任务。但不要直接操作文件,请使用svn命令工具。该解决方案简单而安全。如果从工作目录中执行find -type d ! -path "*/.svn*" -exec /tmp/add_svn_ignore.sh {} +,以下脚本可能会执行此工作:

#! /bin/bash 
ignore="foo" 
for pathname in "[email protected]"; do 
    lines="$(svn propget svn:ignore "$pathname")" 
    grep -F -x -q "$ignore" - <<< "$lines" || 
    svn propset svn:ignore "$lines"$'\n'"$ignore" "$pathname" 
done 
+0

感谢您的回复!我试过了,它看起来像你提出的'find'命令是错误的,我得到'type'的每个字母的'find:illegal option'错误,最后'find:d:没有这样的文件或目录。我使用OS X以防万一。再次感谢。 – Dror

+1

我正在使用_GNU find_。在OS X上,_find_需要第一个选项之前的路径。尝试'找到。 -type d ...'而不是'find -type d ...'。 – nosid