git ls-remoteなどのコマンドを使用して、最後のコミットメッセージ、作成者、ハッシュを取得します。

git ls-remoteなどのコマンドを使用して、最後のコミットメッセージ、作成者、ハッシュを取得します。

likeコマンドを使用して、リモートリポジトリから3つの情報を取得する方法を探していますgit ls-remote。 .bashrcファイルで実行されているbashスクリプトでこれを使用したいと思いますcron。現在私がするなら

git ls-remote https://github.com/torvalds/linux.git master

マスターブランチから最後のコミットハッシュを取得しました。

54e514b91b95d6441c12a7955addfb9f9d2afc65    refs/heads/master

コミットメッセージとコミット作成者を取得する方法はありますか?

ベストアンサー1

gitには目的のタスクを実行できるユーティリティはありませんが、はいgitオブジェクトを解析し、作成者とコミットメッセージを出力するPythonスクリプトを書くのはとても簡単です。

stdin以下は、git commitオブジェクトを使用して作成者を印刷し、コミットメッセージを印刷する例です。

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

必要に応じて完全なユーティリティを作成するには、スマートプロトコルを使用して個々のコミットを取得できないため、サーバーはHTTP経由で愚かなgitトランスポートプロトコルをサポートする必要があります。

しかし、GitHubはもはや愚かなトランスポートプロトコルをサポートしていないので、Linusツリーの独自のホスティングコピーを例として使用します。

リモートサーバーがdump http gitトランスポートをサポートしている場合は、カールを使用してオブジェクトを取得し、上記のPythonスクリプトにパイプすることができます。コミットの作成者とコミットメッセージを表示したいと仮定すると、c3fe5872eb次のシェルスクリプトを実行します。

baseurl=http://git.kyriasis.com/kyrias/linux.git/objects
curl "$baseurl"/c3/fe5872eb3f5f9e027d61d8a3f5d092168fdbca | python parse.py

これにより、次の出力が印刷されます。

Author: Sanidhya Kashyap <[email protected]>

bfs: correct return values

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

...

コミットのための完全なコミットSHAは、c3fe5872eb上記c3fe5872eb3f5f9e027d61d8a3f5d092168fdbcaのシェルスクリプトに見られるように、中間にスラッシュがある2番目の文字の後にSHAが分割されます。これは、gitがSHAの最初の2文字の下に名前空間のオブジェクトを格納するためです。それはおそらく、単一のディレクトリに常駐することができるファイルの数に対する古いファイルシステムの制限のためです。


git-showこの回答は、リモートコマンドの完全な動作実装を提供しませんが、単純なコマンドを作成するために必要な基本的な部分を提供します。

おすすめ記事