git ls-remote와 같은 명령을 사용하여 마지막 커밋 메시지, 작성자 및 해시를 가져옵니다.

git ls-remote와 같은 명령을 사용하여 마지막 커밋 메시지, 작성자 및 해시를 가져옵니다.

like 명령을 사용하여 원격 저장소에서 세 가지 정보를 가져오는 방법을 찾고 있습니다 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는 c3fe5872ebc3fe5872eb3f5f9e027d61d8a3f5d092168fdbca의 쉘 스크립트에서 볼 수 있듯이 중간에 슬래시가 있는 두 번째 문자 다음에 SHA가 분할됩니다. 이는 git이 SHA의 처음 두 문자 아래에 네임스페이스의 개체를 저장하기 때문입니다. 아마도 단일 디렉터리에 상주할 수 있는 파일 수에 대한 이전 파일 시스템의 하한 제한 때문일 것입니다.


git-show이 답변은 원격 명령의 완전한 작동 구현을 제공하지는 않지만 간단한 명령을 만드는 데 필요한 기본 부분을 제공합니다.

답변2

사용하는 방법자식 로그:

git log -1

예:

$ git log -1
commit 4a3dfcc66ca76a19052a7c0d44d5e6c315d79e07
Author: LE Manh Cuong <[email protected]>
Date:   Fri Apr 17 01:54:10 2015 +0700

    Make yanking work in OSX.

관련 정보