gpt4 book ai didi

git - 获取 Git 存储库的最后一次提交

转载 作者:太空狗 更新时间:2023-10-29 12:54:06 25 4
gpt4 key购买 nike

我有一个中央 Git 裸存储库。当对该 repo 进行推送时,我想运行一个接收后 Hook 。该 Hook 将做的是在 Basecamp 项目上创建一条消息(使用他们的 API)。我想要有关刚刚执行的更新的信息。现在我认为 git log -2 --stat 已经足够好了,但还想要更多信息(更新的分支、创建的文件、删除的文件)。任何人都可以帮助我获取所有信息所需的命令吗?执行多个命令对我来说没问题,可能没有一个命令可以获得所有信息。

最佳答案

您可以通过检查和排序 .git/refs/heads 下的文件来找到最新的提交:每次进行新的提交时,相应的 refs/heads文件已更改,即当提交到 master 时,refs/heads/master 已更新。

那么,让我们制定一个解决方案。

第一个任务:找到所有分支(即 refs/heads 下的所有文件,并打印出它们最后一次更改的时间。你在谈论钩子(Hook),所以我们给相对于 .git/hooks 目录的路径:

find ../refs/heads -type f -printf '%T@ %p\n'

这会生成所有分支及其更改日期的列表。查看man page of find参数的解释。

第二个任务:对得到的列表进行排序

find ../refs/heads -type f -printf '%T@ %p\n' |\
sort

第三个任务:我们需要该列表中的最新元素。因为 sort 从旧到新排序,所以我们想要的项目在列表的底部。使用 tail 获取此元素(只有一项,因此传递 -1 标志):

find ../refs/heads -type f -printf '%T@ %p\n' |\
sort |\
tail -1

第四个任务:将日期拖放到获得的行中。从我们的 printf 语句中我们知道日期和路径是用空格分隔的。将其作为分隔符输入 cut (-d "") 并告诉它我们需要第二个字段(即文件路径,-f 2 ).为方便起见,我们将此文件路径存储在名为 $LATESTHEAD 的变量中:

LATESTHEAD=$(\
find ../refs/heads -type f -printf '%T@ %p\n' |\
sort |\
tail -1 |\
cut -d ' ' -f 2 )

第五项任务:现在我们知道了文件名,但我们还需要内容。这是可以传递给 git log 的最新修订版。 cat 完成这项工作。将最新修订存储在 $LATESTREV

LATESTHEAD=$(\
find ../refs/heads -type f -printf '%T@ %p\n' |\
sort |\
tail -1 |\
cut -d ' ' -f 2 )
LATESTREV=$(cat $LATESTHEAD)

现在,您可以使用 $LATESTREV 做任何您想做的脏事。

也许不是最优雅的解决方案(可能有人会告诉你一个更简单的单行代码)但对我有用。

关于git - 获取 Git 存储库的最后一次提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11149541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com