我想知道如何在预提交钩子上获得正在提交的文件的列表。
如果该列表不包含特定路径中特定文件,那么我想拒绝提交。
发布于 2013-07-22 23:29:04
在预提交中使用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。用户将看到您在那里回显的内容。
发布于 2013-07-23 01:44:34
钩子脚本应该使用svnlook命令,而不是svn。svnlook命令可以获取提交的事务编号(如果这是一个预提交挂钩,则需要使用事务编号。如果这是一个提交后钩子,您需要修订号)。
执行svnlook -h命令以查看所有子命令。以下是它们的列表:
author -检索committercat的用户ID -打印文件specifiedchanged -打印文件和目录changeddate -打印commitdiff的时间戳-打印所有filesdirs-changed的差异-打印目录更改的(filesize -打印bytes`history中的文件大小-打印历史记录(更像svn log)D31lock的信息-打印锁informationpropget -获取特定的property.proplist -列出所有properties.tree -打印目录structureuuid -打印repositoryyoungest的/code> -打印最后的修订号。看起来svnlook changed就是你想要的。
关于 svnlook:的两个非常重要的事情
svnlook命令不能更改任何数据,只能显示数据。有些人希望了解如何使用svnlook更改属性值。答:你不能。svnlook将仓库目录位置作为参数,而不是仓库的URL。这意味着svnlook只能在服务器本身上运行。https://stackoverflow.com/questions/17790484
复制相似问题