【问题标题】:Force svn:eol-style=native on the server?在服务器上强制 svn:eol-style=native?
【发布时间】:2011-08-05 23:56:18
【问题描述】:

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

[miscellany]
enable-auto-props = yes

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

有没有办法在svn服务器上做同样的事情?

【问题讨论】:

    标签: svn line-endings eol


    【解决方案1】:

    没有。

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

    SVN 书中包含关于this question 的注释:

    警告

    不要尝试使用挂钩脚本修改事务。一个常见的例子是在提交期间自动设置属性,例如svn:eol-stylesvn:mime-type。虽然这似乎是一个好主意,但它会导致问题。主要问题是客户端不知道钩子脚本所做的更改,也没有办法通知客户端它已过期。这种不一致会导致出人意料的行为。

    与其尝试修改事务,不如检查 pre-commit 钩子中的事务,如果不符合要求则拒绝提交要求。

    【讨论】:

    • 有趣。感谢您的链接。听起来这是要走的路:“与其尝试修改事务,不如在 pre-commit 挂钩中检查事务并在不满足所需要求时拒绝提交。”
    • 为什么这已经过时了?
    【解决方案2】:

    仅仅因为 Fausto 的回答 now is outdated Subversion 1.8


    如果是 Subversion 1.8 或更高版本,您可以在存储库级别使用(不是全局用于服务器上的所有存储库)repository dictated configuration(另请参见topic in Collab's blog),即 - svn:auto-props 在树干的根目录中每个仓库

    【讨论】:

    • 能否请您指出如何设置存储库指示的配置?这些链接仅显示如何阅读它,我似乎也无法从 Google 获得任何信息。
    • 嗯,我通过 TortoiseSVN 的存储库浏览器找到了一种方法,但控制台方法也很有趣。
    • 这个答案很有帮助,但需要澄清。 OP 正在寻找等效的自动道具,但在服务器上强制执行。这个答案指出了新的和有用的 SVN 1.8 客户端存储库svn:auto-propsinheritable-property 功能,但重要的是 1)这是一个客户端功能 - 一个较旧的 SVN 客户端,例如1.7 根本不会使用它,并且不会强制执行 props,并且 2)即使是 SVN 1.8 客户端也可以到 svn add --no-auto-props,同样,没有强制执行。总之,你需要一个钩子。
    【解决方案3】:

    我找不到如何直接在预提交挂钩脚本中检查源代码的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 2017-04-15
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2016-02-19
      相关资源
      最近更新 更多