使用 git ls-remote like 命令获取上次提交消息、作者和哈希

Fun*_*ayu 6 remote git

我正在寻找一种使用git ls-remotelike 命令从远程存储库获取三个信息的方法。我想在 .bash 文件中运行的 bash 脚本中使用它cron。目前,如果我这样做

git ls-remote https://github.com/torvalds/linux.git master
Run Code Online (Sandbox Code Playgroud)

我得到了 master 分支上的最后一个提交哈希:

54e514b91b95d6441c12a7955addfb9f9d2afc65    refs/heads/master
Run Code Online (Sandbox Code Playgroud)

有没有办法获取提交信息和提交作者?

rem*_*mmy 7

虽然 git 没有任何实用程序可以让你做你想做的事,但编写一个解析 git 对象然后输出作者和提交消息的 python 脚本相当容易的。

这是一个示例,它需要一个 git commit 对象stdin,然后打印作者,然后是提交消息:

from parse import parse
import sys, zlib

raw_commit = sys.stdin.buffer.read()

commit = zlib.decompress(raw_commit).decode('utf-8').split('\x00')[1]
(headers, body) = commit.split('\n\n')

for line in headers.splitlines():
    # `{:S}` is a type identifier meaning 'non-whitespace', so that
    # the fields will be captured successfully.
    p = parse('author {name} <{email:S}> {time:S} {tz:S}', line)
    if (p):
        print("Author: {} <{}>\n".format(p['name'], p['email']))
        print(body)
        break
Run Code Online (Sandbox Code Playgroud)

要创建一个像您希望的那样的完整实用程序,服务器需要支持通过 HTTP 的哑 git 传输协议,因为您无法使用智能协议进行一次提交。

然而,GitHub 不再支持哑传输协议,因此我将使用我自托管的 Linus 树副本作为示例。

如果远程服务器支持转储 http git 传输,您可以使用 curl 获取对象,然后将其通过管道传输到上述 python 脚本。假设我们想查看 commit 的作者和提交消息c3fe5872eb,那么我们将执行以下 shell 脚本:

baseurl=http://git.kyriasis.com/kyrias/linux.git/objects
curl "$baseurl"/c3/fe5872eb3f5f9e027d61d8a3f5d092168fdbca | python parse.py
Run Code Online (Sandbox Code Playgroud)

这将打印以下输出:

Author: Sanidhya Kashyap <sanidhya.gatech@gmail.com>

bfs: correct return values

In case of failed memory allocation, the return should be ENOMEM instead
of ENOSPC.

...
Run Code Online (Sandbox Code Playgroud)

commit 的完整提交 SHAc3fe5872ebc3fe5872eb3f5f9e027d61d8a3f5d092168fdbca,正如您在上面的 shell 脚本中看到的那样,SHA 在第二个字符之后被分割,中间有一个斜杠。这是因为 git 在 SHA 的前两个字符下存储命名空间的对象,大概是由于旧文件系统对可以驻留在单个目录中的文件数量的限制较低。


虽然这个答案没有给出远程git-show命令的完整工作实现,但它提供了制作简单命令所需的基本部分。


cuo*_*glm 5

如何使用git log

git log -1
Run Code Online (Sandbox Code Playgroud)

例子:

$ git log -1
commit 4a3dfcc66ca76a19052a7c0d44d5e6c315d79e07
Author: LE Manh Cuong <example@example.com>
Date:   Fri Apr 17 01:54:10 2015 +0700

    Make yanking work in OSX.
Run Code Online (Sandbox Code Playgroud)