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

在服务器上强制svn:eol style=native?,svn,line-endings,eol,Svn,Line Endings,Eol,目前,为了确保每个添加到我们项目中的新文件的subversion属性eol style都设置为native,我们必须将其添加到每个开发人员机器上的~/.subversion/config文件中: [miscellany] enable-auto-props = yes [auto-props] *.java = svn:eol-style=native 有没有办法在svn服务器上执行相同的操作?没有 您可以使用钩子脚本来查找要设置或不设置的属性,但除此之外,这是不可能的。与CVS不同,Sub

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

[miscellany]
enable-auto-props = yes

[auto-props]
*.java = svn:eol-style=native
有没有办法在svn服务器上执行相同的操作?

没有

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

SVN手册包括一个关于以下内容的注释:

警告 不要尝试使用钩子脚本修改事务。一个常见的例子是在提交过程中自动设置属性,如
svn:eol-style
svn:mime-type
。虽然这似乎是个好主意,但也会带来问题。主要问题是客户端不知道钩子脚本所做的更改,并且无法通知客户端该更改已过时。这种不一致性会导致意外的行为

与其试图修改事务,不如在pre-commit钩子中检查事务,如果它不满足所需的要求,则拒绝提交


我找不到一个如何直接在预提交钩子脚本中检查源代码的svn:eol样式属性的示例。最接近的是check-mime-type.pl,它使用mime类型属性来确定文件是否为文本文件

插入到预提交脚本文件中的以下脚本将检查提交中添加的所有.cpp/.h文件是否设置了svn:eol样式属性。(它可以轻松扩展以检查其他文件扩展名)。它还将提供消息,指示哪些文件缺少svn:eol样式属性

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

只是因为Fausto的答案在Subversion 1.8发布后现在已经过时了



在Subversion 1.8或更高版本的情况下,您可以在存储库级别使用(不是全局地用于服务器上的所有存储库)(另请参见),即-svn:auto-props位于每个存储库的主干根中。谢谢你的链接。这听起来像是一种方式:“与其尝试修改事务,不如在预提交挂钩中检查事务,如果它不满足所需的要求,则拒绝提交。”为什么这已经过时了?您能告诉我如何设置存储库指定的配置吗?这些链接只显示了如何阅读它,我似乎也无法从谷歌那里得到任何信息。好吧,我通过TortoiseSVN的存储库浏览器找到了一种方式,但控制台方式也很有趣。这个答案很有帮助,但需要澄清。THOP正在寻找一种等效的自动道具,但在服务器上强制执行。这个答案指出了新的和有用的SVN 1.8客户端存储库
SVN:auto props
heritable property特性,但重要的是1)这是一个客户端特性-一个旧的SVN客户端(例如1.7)根本不会使用它,并且不会强制实施这些特性,2)即使是SVN 1.8客户端也可以添加
SVN,没有自动props
,再说一次,没有任何强制措施。总之,你需要一个钩子。