我想使用一個預先提交的鉤子來阻止開發人員在非根目錄上設置svn:mergeinfo。也就是說,我想強制執行svn:mergeinfo只能將設置爲像「trunk」或「branches/branchName」這樣的目錄。開發人員有時需要「提醒」,將根的子目錄用作合併目標(根據列出的最佳實踐here)是不好的做法。有沒有人有這樣的鉤子腳本或知道我能找到一個?我在一個Windows環境中,所以批處理或PowerShell會更好,但任何事情肯定會有所幫助。Svn pre-commit hook不允許在非根目錄下使用svn:mergeinfo
18
A
回答
7
首先,我建議使用perl或python來完成這個任務,windows的批處理還有很多不足之處。
您可以使用http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/中的一些示例腳本作爲開始。例如,verify-po.py腳本檢查文件編碼和commit-access-control.pl.in檢查作者是否有權提交。您可能會在腳本中使用svnlook diff(如後者)以獲取目錄的更改屬性,並通過相應的路徑查看它們是否使用正則表達式的分支或標記。
更新
找到enforcer pre-commit hook script這似乎是你在找什麼。
這是什麼腳本所做的是它採用 svnlook的窺視交易 是一種進步。當它通過 交易篩選時,它會調用一組 鉤子,這使得管理員可以檢查012xx上的內容並確定它是否可接受爲 。
它包含幾個方法和verify_property_line_added其中(),因爲它是要求被添加到一個屬性上的文件每一行。
0
如果你能CPAN在服務器上:
https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl
如果不是(基於http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969):
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then
# Get list of paths which have changed
TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS")
# Filter those which are allowed: /trunk, /branches/*,...
TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$")
# Iterate over all paths, which are not allowed to have mergeinfo
while IFS= read -r TXN_PATH; do
ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-)
MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null)
if [ ! "$MERGEINFO" = "" ]; then
echo " Cannot merge into directory that is not trunk or a branch:" >&2;
echo " $ELEM_PATH" >&2;
echo " Override by using [override]." >&2;
exit 1;
fi
done <<< "$TXN_PATHS"
# echo "Merge info check: OK"
fi
相關問題
- 1. Git hook不允許在頂層創建目錄
- 2. htaccess不允許根目錄但允許其他網址
- 3. 檢查提交消息中的特定字符串 - SVN Precommit Hook
- 4. robots.txt的:不允許子目錄,但允許目錄
- 5. Mercurial hook precommit獲取存儲庫路徑
- 6. htaccess將根目錄更改爲子目錄,但只允許根目錄url
- 7. SASS錯誤:屬性不允許在文檔的根目錄?
- 8. 允許在.htaccess目錄
- 9. Wix不允許用戶覆蓋目錄
- 10. 修改項目中的目錄結構,現在SVN不允許我提交。
- 11. SVN 405方法不允許
- 12. 允許使用Angular FileSaver.js選擇目錄
- 13. 根據繼承使用情況,以下哪項不允許?
- 14. SVN定義根目錄
- 15. mod_rewrite不允許訪問現有目錄
- 16. 允許子目錄Apache 2.4
- 17. s3fs允許的s3目錄
- 18. mysqldump - git hook - 它允許什麼?
- 19. 正則表達式for robots.txt - 不允許在目錄內的東西,但不允許目錄本身
- 20. 使用RAD不允許Java項目
- 21. SVN hook/svn up /衝突
- 22. 允許用戶選擇一個目錄
- 23. 允許用戶瀏覽到目錄
- 24. 配置SVN在Linux上,允許非驗證的讀/寫訪問
- 25. 水銀錯誤。不在根目錄下
- 26. 的「svn diff」目錄下
- 27. .htaccess:允許iframe從subdir只能從根目錄查看
- 28. 密碼保護目錄,但仍允許在主頁上使用
- 29. 我如何使不允許列允許空和允許空列不允許空
- 30. SVN post-commit hook使得提交非常慢 - 如何解決?
嚴格的好奇心 - 你使用Subversion 1.5或1.6? (我也遭受了svn:mergeinfos在各種目錄/文件上的合併,因爲合併到非根目錄,但是在1.5上) – 2010-07-23 01:05:28
我們在1.6。我遇到的問題不是由於svn客戶端在所有事物上設置了mergeinfo的舊的1.5錯誤。相反,這些問題是由於「用戶錯誤」導致的,用戶使用諸如「trunk/mySubProject」之類的非根目錄作爲合併目標執行合併,因此在該目錄上設置合併信息。這會導致後續的合併,因爲我相信你知道。 – 2010-07-23 13:43:57
確實 - 感謝您的信息。我們最近只有1.6,所以我沒有時間觀察事情的變化。不過,我需要解決同樣的問題。 +收藏 – 2010-07-23 14:22:11