9
A
回答
12
在預先提交中使用svnlook
。 svnlook changed
給出了提交的更改路徑。將此與您的列表進行比較。如果找到/未找到路徑,則拒絕它。一個預先提交的簡單例子可能是。
#!/bin/sh
REPOS="$1"
TXN="$2"
SPATH="specific/path"
FOUND=$(svnlook changed -t "$TXN" "$REPOS" | tr -d '\n' | grep -E ".*$SPATH.*")
if [ "$FOUND" != "" ]
then
echo "Reject commit!" 1>&2 && exit 1
else
exit 0
fi
在這裏我刪除了新行和grep感興趣的路徑。如果找不到路徑,請重新提交exit 1
。用戶會看到你在那裏回顯的內容。
12
掛鉤腳本應該使用svnlook
命令而不是svn
。 svnlook
命令可以使用提交的事務編號(如果這是一個預提交鉤子,則需要使用事務編號,如果這是一個提交後鉤子,則需要修訂編號)。
做一個svnlook -h
看到所有的子命令。這裏是他們的列表:
author
- 檢索提交者cat
的用戶ID - 打印出文件中指定changed
- 打印出來的文件和目錄,改變date
- 打印出提交的時間戳diff
- 打印所有文件的差異dirs-changed
- 打印出修改的目錄(filesize
- 打印出bytes`history
文件大小 - 打印出歷史(更像svn log
)info
- 打印出文件的信息lock
- 打印鎖定信息propget
- 獲取特定屬性。proplist
- 列出所有屬性。tree
- 打印出來的目錄結構uuid
- 打印出庫youngest
的UUID - 打印出來的最後一個版本號。
看起來像svnlook changed
是你想要的。
兩個約svnlook
非常重要的事情:
- 的
svnlook
命令不能改變任何數據,只是顯示它。有些人希望看到如何使用svnlook
更改房產價值。答案是,你不能。 svnlook
以存儲庫目錄位置作爲參數,而不是存儲庫的URL。這意味着svnlook
只能在服務器上運行。
-1
你可以嘗試這樣的事情:
FILTER="(some/path|other/path)"
FOUND=$($SVNLOOK dirs-changed "$REPOS" -t "$TXN" | $GREP -E ".*/$FILTER/.*")
if [[ "$FOUND" == "" ]]; then
echo "Your commit has been blocked." 1>&2
exit 1
fi
相關問題
- 1. 預提交鉤子在提交文件
- 2. SVN預提交鉤子
- 3. SVN預提交鉤子 - 獲取文件列表(Windows)中
- 4. SVN後提交掛鉤文件列表
- 5. SVN預提交掛鉤
- 6. SVN預提交鉤到Linux
- 7. 預先提交svn鉤子以修改要在c中提交的文件#
- 8. 預提交掛鉤獲取部分提交的文件列表
- 9. 雙重提交 - svn鉤子
- 10. Git預提交鉤子在提交後添加文件
- 11. 預提交鉤devtools ::文件
- 12. 在Visual SVN服務器中發佈提交鉤子錯誤
- 13. Bazaar插件:預提交鉤子上的修改文件列表
- 14. 針對衝突文件的SVN預提交鉤子
- 15. 在CVS預提交鉤子中使用提交消息
- 16. SVN鉤來從提交的文件
- 17. 凱明阻斷提交預鉤SVN
- 18. SVN預提交掛鉤失敗
- 19. svn在intellij-idea內部提交鉤子
- 20. SVN - 在啓動提交鉤子中獲取提交大小?
- 21. svn更新後的提交鉤子
- 22. SVN鉤子複製提交的文件和文件夾?
- 23. 在svn中用戶定義的預先提交鉤子?
- 24. SVN提交鉤子,以避免提交到特定分支
- 25. 後提交鉤SVN更新
- 26. 設置這些龜SVN提交鉤子
- 27. SVN後提交鉤子發佈網站?
- 28. 如何從Perl中的Subversion預提交鉤子訪問提交的文件?
- 29. 如何使預接收鉤子忽略已提交的提交
- 30. PERL腳本作爲預提交鉤子在SVN
請你拿這個問題來看看http://stackoverflow.com/questions/29236308/how-to-print-arguments-in- svn-hook –
答案已經給出。一個SVN鉤子只會顯示打印到'STDERR'而不是'STDOUT'的內容。而且,只有當hook _fails_(即以非零退出值退出)時纔會發生。 –
好的,所以我在我的post-commit hook中有這個命令: $ msg ='$ svnlook changed -t「$ rev」「$ repos」'; 和msg的長度爲0,這意味着命令無法執行,這是在Windows上,所以這個命令是否正確,因爲我沒有在任何地方看到錯誤? –