長い SHA は次のように取得できます。
repo = git.Repo(search_parent_directories=True)
sha = repo.head.object.hexsha
または、git 3.1.7 では:
sha = repo.head.commit.hexsha
短いものはどうですか?(ショートSHA
はレポの規模で決まるので、こんなはずじゃないsha[:7]
)
私が知る限り、gitpythonCommit
オブジェクトは短い sha を直接サポートしていません。ただし、 gitを直接呼び出して取得するためのgitpythonのサポートを引き続き使用できます(git 3.1.7以降):
repo = git.Repo(search_parent_directories=True)
sha = repo.head.commit.hexsha
short_sha = repo.git.rev_parse(sha, short=4)
これは実行するのと同じです
git rev-parse --short=4 ...
これは、短い hash を取得する通常の方法です。これは、長さ>= 4の可能な限り最短の明確なハッシュを返します(より小さな数値を渡すこともできますが、gitの内部最小値は4であるため、同じ効果があります)。
コミットを一意に識別できる最小の SHA を生成するには、hereのshort
引数を使用する必要があります。rev-parse
基本的に、short
は内部 git API を呼び出し、短いために非常に小さな値を渡した場合でも、コミットを一意に識別できる SHA の可能な限り短い文字列を返します。効果的に、以下のようなことを行うことができます。これにより、常に最短の SHA が得られます (私はshort=1
それを強調するために使用します)。
In [1]: import git
In [2]: repo = git.Repo(search_parent_directories=True)
In [3]: sha = repo.head.object.hexsha
In [4]: short_sha = repo.git.rev_parse(sha, short=1)
In [5]: short_sha
Out[5]: u'd5afd'
これについての詳細は、こちらの git 側から読むことができます。また、git-rev-parse のマンページに記載されているように、 --short はデフォルトで値として 7 を取り、最小値は 4 です。
--short=number
オブジェクト名の完全な SHA-1 値を出力する代わりに、それらをより短い一意の名前に短縮しようとします。長さが指定されていない場合は、7 が使用されます。最小の長さは 4 です。
上記のものと比較して、これを書くためのより短い方法があるようです: gitpython 3.1.15 の場合、単純に行うことができます
hash = repo.git.rev_parse(repo.head, short=True)
つまり、明示的に取得する必要はありません
sha = repo.head.commit.hexsha
最初。