目前,为了确保为我们项目中添加的每个新文件将subversion属性eol-style
设置为native
,我们必须将其添加到每个~/.subversion/config
文件中。我们的开发者机器:
[miscellany]
enable-auto-props = yes
[auto-props]
*.java = svn:eol-style=native
有没有办法在svn服务器上执行等效操作?
答案 0 :(得分:9)
没有。
您可以使用钩子脚本来查找要设置的属性,但除此之外,它是不可能的。与CVS不同,Subversion不能更改来自提交的代码的内容。
SVN一书中包含有关this question:
的说明警告
不要尝试使用钩子脚本修改事务。一个常见的例子是在提交期间自动设置
svn:eol-style
或svn:mime-type
等属性。虽然这似乎是一个好主意,但它会导致问题。主要问题是客户端不知道钩子脚本所做的更改,并且没有办法通知客户端它已经过时了。这种不一致可能导致意外和意外的行为。不是试图修改事务,而是检查预提交钩子中的事务更好,如果它不符合要求则拒绝提交要求。
答案 1 :(得分:7)
仅仅因为Fausto的回答现在已经过时在发布后 Subversion 1.8
如果是Subversion 1.8或更高版本,您可以在存储库级别使用(不是全局服务器上的所有存储库)repository dictated configuration(另请参阅topic in Collab's blog),即 - svn:auto-props in the每个存储库的主干根
答案 2 :(得分:0)
我找不到如何直接在预提交钩子脚本中检查源代码的svn:eol-style属性的示例。最接近的是check-mime-type.pl,它使用mime-type属性来确定文件是否是文本文件。
插入预提交脚本文件的以下脚本将检查提交中添加的所有.cpp / .h文件是否都设置了svn:eol-style属性。 (可以轻松扩展以检查其他文件扩展名)。它还将提供消息以指示哪些文件缺少svn:eol-style属性。
REPOS="$1"
TXN="$2"
# Get new cpp/h files
ADDFILES=$(${SVNLOOK} changed "$REPOS" -t "$TXN" | sed -n -e '/^A.*\(\.cpp\|\.h\)$/s/^A *//p')
#echo "ADDFILES=$ADDFILES" >&2
# Check files for svn:eol-style property
ESMISSING=''
for f in ${ADDFILES}
do
if [[ "$(${SVNLOOK} pl ${REPOS} -t ${TXN} ${f})" != *svn:eol-style* ]]
then
# output to stderr to include message in svn commit ouput
echo "No svn:eol-style property set on file $f" >&2
ESMISSING=1
fi
done
if [[ -n "$ESMISSING" ]]
then
exit 1
fi