在服务器上强制svn:eol-style = native?

时间:2011-04-15 01:06:41

标签: svn line-endings eol

目前,为了确保为我们项目中添加的每个新文件将subversion属性eol-style设置为native,我们必须将其添加到每个~/.subversion/config文件中。我们的开发者机器:

[miscellany]
enable-auto-props = yes

[auto-props]
*.java = svn:eol-style=native

有没有办法在svn服务器上执行等效操作?

3 个答案:

答案 0 :(得分:9)

没有。

您可以使用钩子脚本来查找要设置的属性,但除此之外,它是不可能的。与CVS不同,Subversion不能更改来自提交的代码的内容。

SVN一书中包含有关this question

的说明
  

警告

     

不要尝试使用钩子脚本修改事务。一个常见的例子是在提交期间自动设置svn:eol-stylesvn: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