How can I make Gitolite post-receive hook to show full path to modified file?
这是我收到邮件的钩子:
1 2 3 4 5 6 7
| #!/bin/bash
while read oldrev newrev ref; do
git diff --name-only oldrev..newrev
git --work-tree=/tmp checkout HEAD -- plugin.yml
echo -e"Test complete maybe..." | tee >(exec logger)
done |
下面是输出:

如果我用oldrev--newrev替换oldrev..newrev,输出是:
我需要得到修改这个文件(plugin.yml)的文件夹。谢谢。
- 是的,循环中应该是$oldRev和$newRev。请参阅cyberciti.biz/faq/…或cyberciti.biz/faq/bash-for-loop上的更多示例。
- 是的,它显示了:d和最后一个问题:如何将这个路径放入变量中?也许test=$git diff--仅名称oldrev..newrev?
- 是的,但它是test=$(),而不是$。参见unix.stackexchange.com/a/4570/7490上的"命令替换"
- @我非常喜欢你!:3没有人会长期帮助我,容忍我。1000.000.000再次感谢,你太棒了!!!!我甚至不知道Linux的基本知识,真丢脸。我会尽我最大的努力去学习它,而不是问愚蠢的问题。再次感谢!
首先,每个钩子可以简单地检查其执行路径:这将为您提供repo的名称。
第二,我在前面的问题中提到的git diff --name-only将为您提供被推送的文件的相对路径(包括mod1/2)。
1
| git diff --name-only $1..$2 |
由于后接收钩子接收到标准输入上的oldrev、newrev和ref。
- –仅名称不存在?真的?听起来很有趣……
- @andrewgorpenko git scm.com/docs/git diff git diff---仅名称
- 代码更新并添加了输出。