github:如何在不克隆的情况下从命令行读取日志

时间:2017-10-09 18:41:53

标签: git github

如何在不克隆项目的情况下从命令行读取Github上的存储库日志?

换句话说,如果裸仓库在我的文件系统的某个地方,我可以用以下内容读取日志:

git -C /media/git-repos/project.git log

如果回购邮件在Github上,我该怎么办?

2 个答案:

答案 0 :(得分:2)

一般情况下,你不能。但是,根据完全你想要的东西,也许你可以做一些工作。

git命令行提供与遥控器非常有限的交互。您通常只需fetchpushpull。 (有一些“不太常见”的远程交互,但没有一个像你要问的那样。)但几乎所有东西都是在本地完成,按设计完成。

您谈到的-C场景正在利用非常特殊情况。您实际上并没有将您的裸仓库与远程仓库进行交互;你告诉git像本地回购一样访问它。实际上,您可以只是cd /media/git-repos/project-git,然后正常运行git log;因为它确实可以在本地访问。

但你不能cd到github回购;您可以通过git的远程协议访问,也可以通过github提供的API访问。 (类似的情况适用于任何远程托管服务。)特别是在github的情况下,这些是Web API。

因此,如果您知道可提供所需结果的网络API请求,则可以通过curl提供该请求。这是你能做的最好的事情。您可以通过此处记录的commits API调用获得您想要的内容:https://developer.github.com/v3/repos/commits/

答案 1 :(得分:1)

基于@MarkAdelsberger的回答,这是一个快速的python脚本,它返回github上git存储库的日志。它需要两个参数,用户名 repo-name

#!/usr/bin/python
# github_log.py
import urllib2, json, sys

json_str = urllib2.urlopen("https://api.github.com/repos/{}/{}/commits"
        .format(sys.argv[1], sys.argv[2])).read()
commits = json.loads(json_str)

for c in commits:
    print c['sha'][0:8],c['commit']['message'].split('\n')[0]

示例

./github_log.py microsoft vscode

返回:

a4ae8375 fix decorations service test
45a71083 :lipstick:
9613370d update title area faster when opening a new group
42e1d19a composite bar polish css classes
8f4e125a Fix compilation errors
3170a7f5 Do not overload getConfiguration for sending it to extension host. Use getConfigurationData
f704a6c7 composite part: move pin / unpin / mode to compositePart
5276a4fc deco - proper explorer update on config change