20

長い 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])

4

6 に答える 6

16

私が知る限り、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であるため、同じ効果があります)。

于 2015-08-12T06:21:40.213 に答える
6

コミットを一意に識別できる最小の 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 です。

于 2015-08-12T06:42:59.780 に答える
1

上記のものと比較して、これを書くためのより短い方法があるようです: gitpython 3.1.15 の場合、単純に行うことができます

hash = repo.git.rev_parse(repo.head, short=True)

つまり、明示的に取得する必要はありません

sha = repo.head.commit.hexsha

最初。

于 2021-05-10T12:07:56.040 に答える