2011-04-15 85 views
12

目前,为了确保颠覆属性eol-style设置为native用于添加到我们的项目中的每个新文件,我们必须把它添加到~/.subversion/config文件对我们每个开发人员的机器:在服务器上强制svn:eol-style = native?

[miscellany] 
enable-auto-props = yes 

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

有一种在svn服务器上执行相同操作的方法?

回答

9

不,没有。

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

svn书包括备注this question

警告

不要试图用钩子脚本修改事务。一个常见的例子是在提交期间自动设置属性,例如svn:eol-stylesvn:mime-type。虽然这可能看起来不错,但会造成问题。主要问题是客户端不知道钩子脚本所做的更改,并且无法通知客户端它已过期。这种不一致会导致令人惊讶和意外的行为。

而是试图修改的交易,它是在以检查交易好得多预提交挂钩,并拒绝提交,如果它不符合预期的要求。

+0

有趣。感谢您的链接。这听起来像是这样:“不是试图修改事务,而是在预提交钩子中检查事务并在它不符合期望的要求时拒绝提交更好。” – Bart 2011-04-15 16:38:27

+0

过时的回答。 – bahrep 2013-09-13 15:34:12

+1

这是为什么过期? – 2013-09-13 18:04:18

0

我找不到如何直接在pre-commit钩子脚本中检查源代码的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 
7

只是因为福斯托现在的答案是释放颠覆1.8


后过时在Subversion 1.8的情况下,或者以后你可以在仓库级别使用(不是全球的所有存储库在服务器上)repository dictated configuration(也见topic in Collab's blog),即 - svn:auto-props在每个版本库的trunk的根目录下

+0

可否请您指出如何设置存储库口授配置?这些链接仅显示如何阅读,我似乎也无法从Google获取任何内容。 – lapis 2013-12-26 16:56:39

+0

那么,我找到了一个通过TortoiseSVN的Repository Browser的方式,但是一个控制台的方式也很有趣。 – lapis 2013-12-26 19:53:44

+0

这个答案很有帮助,但需要澄清。操作系统正在寻找相当于自动道具,但在服务器上执行。这个答案指出了新的和有用的SVN 1.8客户端存储库svn:auto-props的inheritable-property功能,但重要的是1)这是一个客户端功能 - 一个较老的SVN客户端,例如。 1.7完全不会使用它,并且道具不会被强制执行,2)即使是SVN 1.8客户端也可以'svn添加--no-auto-props',并且再次强制执行任何操作。总之,你需要一个钩子。 – javabrett 2015-07-27 01:18:41

相关问题