目前,为了确保为添加到我们项目中的每个新文件eol-style
设置subversion 属性native
,我们必须将其添加到~/.subversion/config
每个开发人员机器上的文件中:
[miscellany]
enable-auto-props = yes
[auto-props]
*.java = svn:eol-style=native
有没有办法在 svn 服务器上做同样的事情?
目前,为了确保为添加到我们项目中的每个新文件eol-style
设置subversion 属性native
,我们必须将其添加到~/.subversion/config
每个开发人员机器上的文件中:
[miscellany]
enable-auto-props = yes
[auto-props]
*.java = svn:eol-style=native
有没有办法在 svn 服务器上做同样的事情?
不,那里没有。
您可以使用挂钩脚本来查找要设置或不设置的属性,但除此之外这是不可能的。Subversion 与 CVS 不同,不能更改来自提交的代码内容。
SVN 书中包含有关此问题的注释:
警告
不要尝试使用挂钩脚本修改事务。一个常见的例子是在提交期间自动设置属性,例如
svn:eol-style
或svn:mime-type
。虽然这似乎是一个好主意,但它会导致问题。主要问题是客户端不知道钩子脚本所做的更改,也没有办法通知客户端它已过时。这种不一致会导致令人惊讶和意外的行为。与其尝试修改事务,不如在pre-commit钩子中检查事务,如果不满足所需的要求则拒绝提交。
只是因为现在发布Subversion 1.8后 Fausto 的答案已经过时了
在 Subversion 1.8 或更高版本的情况下,您可以在存储库级别使用(不是全局用于服务器上的所有存储库)存储库指示配置(另请参阅Collab 博客中的主题),即 - 每个存储库的主干根目录中的 svn:auto-props
我找不到如何直接在预提交挂钩脚本中检查源代码的 svn:eol 样式属性的示例。最接近的是 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