长SHA可以如下所示:
repo = git.Repo(search_parent_directories=True)
sha = repo.head.object.hexsha
短篇小说怎么样?
(短SHA
由回购的比例决定,所以它不应该像sha[:7]
)
答案 0 :(得分:10)
据我所知,gitpython Commit
对象不直接支持short sha。但是,你可以使用gitpython的tabs API documentation来检索它:
short_sha = repo.git.rev_parse(sha, short=4)
这相当于运行
git rev-parse --short=4 ...
命令行上的,即support for calling git directly。这将返回长度为> = 4的最短可能的明确散列(您可以传入较小的数字,但由于git的内部min为4,它将具有相同的效果)。
答案 1 :(得分:5)
您需要在此处使用short
rev-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。
答案 2 :(得分:2)
实际上,您需要使用
short_sha = repo.git.rev_parse(sha, short=True)
short = 4即使在我巨大的git base中也总是显示4个字母的哈希值
答案 3 :(得分:0)
已经提供的答案假设您通过shell调用rev-parse,这很慢。如果您已经拥有对repo的引用,则可以通过使用字符串截断访问Commit对象上的name_rev属性来执行此操作,如下所示。引用固定在您提供的长度(此处为8),但它可以工作:
repo.remotes.origin.refs['my/branch/name'].object.name_rev[:8]
此命令的实际输出是完整sha,后跟空格,后跟分支名称。
答案 4 :(得分:0)
sha = "HEAD"
c = repo.commit(sha)
c.hexsha[:7]
'575c375'
答案 5 :(得分:0)
当前答案已过时,检索提交的方式为commit.hexsha
。
答案 6 :(得分:0)
与上面的相比,似乎有一种更短的写法:对于 gitpython 3.1.15,你可以简单地做
hash = repo.git.rev_parse(repo.head, short=True)
即您不需要明确获取
sha = repo.head.commit.hexsha
首先。