Jee*_*s24 8 git githooks git-log
我有一个中央的Git裸存储库.当对该回购进行推送时,我想运行后接收挂钩.该钩子将做什么是在Basecamp项目上创建一条消息(使用他们的API).我想要了解刚刚执行的更新的信息.现在我觉得git log -2 --stat还不错,但想要更多信息(更新的分支,文件创建,文件删除).任何人都可以帮助我获取所有信息我需要做的命令吗?执行多个命令对我很好,可能没有一个命令可以获取所有信息.
您可以通过检查和排序 下的文件来找到最新的提交.git/refs/heads:每次进行新的提交时,相应的refs/heads文件都会更改,即提交到 时master,refs/heads/master会更新。
那么,让我们制定一个解决方案。
第一个任务:找到所有分支(即下的所有文件refs/heads并打印出它们上次更改的时间。您正在谈论钩子,所以我们给出相对于目录的路径.git/hooks:
find ../refs/heads -type f -printf '%T@ %p\n'
Run Code Online (Sandbox Code Playgroud)
这会生成所有分支及其更改日期的列表。有关参数的说明,请参阅的手册页。find
第二个任务:对获得的列表进行排序
find ../refs/heads -type f -printf '%T@ %p\n' |\
sort
Run Code Online (Sandbox Code Playgroud)
第三个任务:我们需要该列表中的最新元素。由于sort从旧到新排序,我们想要的项目位于列表的底部。获取此元素tail(只有一项,因此传递标志-1):
find ../refs/heads -type f -printf '%T@ %p\n' |\
sort |\
tail -1
Run Code Online (Sandbox Code Playgroud)
第四个任务:删除获取的行中的日期。从我们的printf声明中我们知道日期和路径是用空格分隔的。将其作为分隔符输入cut( -d " ") 并告诉它我们需要第二个字段(即文件路径-f 2)。为了方便起见,我们将此文件路径存储在一个名为的变量中$LATESTHEAD:
LATESTHEAD=$(\
find ../refs/heads -type f -printf '%T@ %p\n' |\
sort |\
tail -1 |\
cut -d ' ' -f 2 )
Run Code Online (Sandbox Code Playgroud)
第五个任务:现在我们知道文件名,但我们需要内容。这是可以传递给 的最新修订版git log。cat做这个工作。将最新版本存储在$LATESTREV
LATESTHEAD=$(\
find ../refs/heads -type f -printf '%T@ %p\n' |\
sort |\
tail -1 |\
cut -d ' ' -f 2 )
LATESTREV=$(cat $LATESTHEAD)
Run Code Online (Sandbox Code Playgroud)
现在,您可以用来$LATESTREV做任何您想做的脏事。
也许不是最优雅的解决方案(可能有人会告诉你一个更简单的俏皮话),但对我有用。