使用gitpython获取提交的简短提示

问题描述 投票:13回答:3

长SHA可以得到如下:

repo = git.Repo(search_parent_directories=True)
sha = repo.head.object.hexsha

短的怎么样? (短SHA由回购的规模决定,所以它不应该像sha[:7]

python git gitpython
3个回答
10
投票

据我所知,gitpython Commit对象不直接支持短sha。但是,你可以使用gitpython的support for calling git directly来检索它:

short_sha = repo.git.rev_parse(sha, short=4)

这相当于跑步

git rev-parse --short=4 ...

在命令行上,这是the usual way of getting the short hash。这将返回长度> = 4的最短可能的明确散列(您可以传入较小的数字,但由于git的内部min为4,它将具有相同的效果)。


5
投票

您需要在此处使用shortrev-parse参数来生成可以唯一标识提交的最小SHA。基本上,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'

你可以阅读more about this from the git side here。另外,如man-page for git-rev-parse中所述, - short默认情况下将7作为其值,最小值为4。

--short=number

不要输出对象名称的完整SHA-1值,而是尝试将它们缩写为更短的唯一名称。如果未指定长度,则使用7。最小长度为4。


0
投票

已经提供的答案假设您通过shell调用rev-parse,这很慢。如果您已经拥有对repo的引用,则可以通过使用字符串截断访问Commit对象上的name_rev属性来执行此操作,如下所示。引用固定在您提供的长度(此处为8),但它有效:

repo.remotes.origin.refs['my/branch/name'].object.name_rev[:8]

此命令的实际输出是完整sha,后跟空格,后跟分支名称。

© www.soinside.com 2019 - 2024. All rights reserved.