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上,所以这个命令是否正确,因为我没有在任何地方看到错误? –