推送到服务器时获取所有提交

时间:2011-06-09 02:56:36

标签: python git gitpython

我正在制作一个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挂钩,是否是在服务器上使用的正确挂钩?

1 个答案:

答案 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