2011-04-15 29 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