Enquanto não há utilitários que vêm com o git que permite fazer o que você quer, é fácil escrever um script python que analisa um objeto git e então mostra o autor e a mensagem de commit .
Aqui está um exemplo que espera um objeto de confirmação do git em stdin
e imprime o autor seguido pela mensagem de confirmação:
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
Para fazer um utilitário completo como você deseja, o servidor precisa suportar o protocolo de transporte dumb git por HTTP, já que você não pode obter um único commit usando o protocolo inteligente.
No entanto, o GitHub não suporta mais o protocolo de transporte simplificado, por isso vou usar minha cópia auto-hospedada da árvore Linus como exemplo.
Se o servidor remoto for compatível com o dump http git transport, você poderá usar o curl para obter o objeto e encaminhá-lo para o script python acima. Digamos que queremos ver o autor e enviar a mensagem de confirmação c3fe5872eb
, depois, executaremos o seguinte script de shell:
baseurl=http://git.kyriasis.com/kyrias/linux.git/objects
curl "$baseurl"/c3/fe5872eb3f5f9e027d61d8a3f5d092168fdbca | python parse.py
Que imprimirá a seguinte saída:
Author: Sanidhya Kashyap <[email protected]>
bfs: correct return values
In case of failed memory allocation, the return should be ENOMEM instead
of ENOSPC.
...
O commit completo SHA de commit c3fe5872eb
é c3fe5872eb3f5f9e027d61d8a3f5d092168fdbca
e, como você pode ver no script de shell acima, o SHA é dividido após o segundo caractere com uma barra no meio. Isso ocorre porque o git armazena objetos namespaced sob os dois primeiros caracteres do SHA, presumivelmente devido ao sistema de arquivos legado ter baixos limites no número de arquivos que podem residir em um único diretório.
Embora essa resposta não forneça uma implementação completa de trabalho de um comando git-show
remoto, ela fornece as partes básicas necessárias para criar uma simples.