長いSHAは次のように取得できます:
repo = git.Repo(search_parent_directories=True)
sha = repo.head.object.hexsha
短いものはどうですか? (短いSHA
はリポジトリのスケールによって決定されるため、sha[:7]
のようにしないでください)
私の知る限り、gitpython Commit
オブジェクトは短いshaを直接サポートしていません。ただし、それでもgitpythonの gitを直接呼び出すためのサポート を使用して取得できます。
short_sha = repo.git.rev_parse(sha, short=4)
これは実行するのと同じです
git rev-parse --short=4 ...
コマンドラインで、 短いハッシュを取得する通常の方法 。これにより、長さが4以上の可能な限り最短の明確なハッシュが返されます(より少ない数を渡すこともできますが、gitの内部最小値は4であるため、同じ効果があります)。
ここでrev-parse
のshort
引数を使用して、コミットを一意に識別できる最小のSHAを生成する必要があります。基本的に、short
は内部gitAPIを呼び出し、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のmanページ で説明したように、-shortはデフォルトで値として7を取り、最小値は4です。
--short=number
オブジェクト名の完全なSHA-1値を出力する代わりに、それらをより短い一意の名前に省略してみてください。長さが指定されていない場合、7が使用されます。最小の長さは4です。
すでに提供されている回答は、シェルを介してrev-parseを呼び出していることを前提としていますが、これは低速です。リポジトリへの参照がすでにある場合は、次のように文字列を切り捨ててCommitオブジェクトのname_revプロパティにアクセスすることでこれを行うことができます。参照は指定した長さ(ここでは8)に固定されていますが、機能します。
repo.remotes.Origin.refs['my/branch/name'].object.name_rev[:8]
このコマンドの実際の出力は、完全なsha、スペース、ブランチ名の順です。