我正在制作一个git post-commit钩子,将我的提交消息发布到Twitter。我在服务器上设置了挂钩,这意味着它只在我调用git push
时运行。
要与python中的git接口,我正在使用GitPython。在我的代码中,我使用repo.head.commit.message
来获取最新的提交消息。这意味着如果我推送多个提交,它只会获得最后一个提交。
这是我到目前为止所做的。
class GITHelper:
"This class interacts with GIT for us"
def __init__(self, path):
repo = git.Repo(path)
headcommit = repo.head.commit
self.message = headcommit.message
self.author = headcommit.author.name
如何通过推送获得所有提交?或者,我如何获得推送的提交数量?
repo.iter_commits('master', max_count=5)
可以获得尽可能多的提交,所以如果我知道有多少提交,我可以使用它。
编辑:我正在测试,当我运行git push
时,似乎这个钩子从 last 提交开始,而不是我刚刚提交的那个推。如何创建一个post-commit钩子,从我刚刚推送到服务器的提交中获取消息?
编辑2 :我实际上使用的是更新挂钩,而不是post-commit挂钩,是否是在服务器上使用的正确挂钩?
答案 0 :(得分:3)
githooks文档说:
The hook executes once for each ref to be updated, and takes three parameters:
- the name of the ref being updated,
- the old object name stored in the ref,
- and the new objectname to be stored in the ref.
因此,检查脚本获取的参数,您还应该获得新的参考,然后您可以找出旧参考和新参考之间的提交。如果它是一个shell脚本,你可以这样做:
git log --oneline $oldRef..$newRef