1

我正在制作一个 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,似乎这个钩子从最后一次提交中获得了头部,而不是我刚刚推送的那个。如何制作一个提交后挂钩,从我刚刚推送到服务器的提交中获取消息?

编辑 2:我实际上使用的是更新挂钩,而不是提交后挂钩,这是在服务器上使用的正确挂钩吗?

4

1 回答 1

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.

所以,检查你的脚本得到的参数,你也应该得到新的 ref,然后你可以找出新旧 ref 之间的提交。如果它是一个 shell 脚本,你可以这样做:

git log --oneline $oldRef..$newRef
于 2011-06-09T03:29:01.480 回答