对于我们的项目,我们避免在用户的svn配置文件中使用svn global-ignores
,因为这些svn设置仅限于客户端,而不是项目的属性。我们想要一种使用类似.gitignore
文件管理项目子目录中被忽略文件的方法。我开发了一个简单的方案,使用.svnignore
文件结合脚本(1)在目录树中查找.svnignore
文件,以及(2)更新每个目录中的svn:ignore
属性找到.svnignore
个文件。当有人更新文件时,他们只需要记住运行脚本;我们发现这比手动管理目录上的svn:ignore
属性更容易。
这是脚本:
#!/bin/sh
# Syntax of the .svnignore file: like what "svn propset svn:ignore" accepts,
# and in addition, lines in the .svnignore file that begin with a pound sign
# (#) are ignored so that one can put comments in the file.
find $1 -depth -name .svnignore | while read file ; do
dir="`dirname $file`"
egrep -v '^[ ]*#' $file | svn propset svn:ignore -F - $dir
svn update $dir
svn commit --depth=immediates -m"Updated list of ignored files." $dir $dir/.svnignore
done
echo "Done."
以下是此脚本接受的.svnignore
文件的示例:
# WARNING: This .svnignore file is not understood by SVN directly.
# WARNING: It is meant to be used in conjunction with our script in
# WARNING: trunk/project/scripts/svn-update-from-svnignore.sh
autom4te.cache
Makefile
config.log
config.status
.deps
include
TAGS
CTAGS
*.o
我的问题是:
感谢您的任何提示。
答案 0 :(得分:2)
svn up
内部循环(WC 的根中的单个更新之前会更优雅的方式)-print0
)可以通过管道传输到svn propset
的xargs,完全消除周期答案 1 :(得分:1)
现在对你没什么帮助,但是Subversion 1.8(当它发布时)会有Repository Dictated Configuration,它会对你有帮助。特别是1.8将有一个svn:global-ignores属性,其作用类似于global-ignores配置选项。 1.8还将具有可继承属性和svn:global-ignores是一种可继承的属性。因此,在目录上设置此属性将影响该目录下的任何内容。
http://subversion.apache.org/docs/release-notes/1.8.html#repos-dictated-config
答案 2 :(得分:0)
不要放弃对全球的忽视如此之快。您可以通过SVN外部的某种机制更新它们,例如登录脚本或(在Windows上)全局策略。
当然,只有拥有集中管理的环境,例如,在公司网络中。对于一个开源项目,这不会起作用。但是你可能无论如何也不会使用SVN。