使用gitpython获取提交的sha

nwsw7zdq  于 2023-01-07  发布在  Git
关注(0)|答案(6)|浏览(99)

长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]那样)

cngwdvgl

cngwdvgl1#

据我所知,gitpython Commit对象并不直接支持sha,但是你仍然可以使用gitpython对直接调用git的支持来获取sha(从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 ...

这将返回长度〉= 4的最短哈希值(你可以传入一个更小的数字,但由于git的内部min值是4,所以效果是一样的)。

xmd2e60i

xmd2e60i2#

这里你需要使用rev-parseshort参数来生成唯一标识提交的最小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。

9rnv2umw

9rnv2umw3#

实际上你需要使用

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

short=4总是显示4个字母的哈希值,即使在我的git库中也是如此

dhxwm5r4

dhxwm5r44#

对于gitpython3.1.15,似乎有一种更短的方法来比较哈希值to the other answers
你可以简单地

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

您不需要显式获取

sha = repo.head.commit.hexsha

第一。

vsmadaxz

vsmadaxz5#

已经给出的答案假设你是通过shell调用rev-parse的,这是很慢的。如果你已经有了一个repo的引用,你可以通过访问Commit对象的name_rev属性来实现,并使用如下的字符串截断。引用的长度是固定的(这里是8),但它是有效的:

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

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

kb5ga3dv

kb5ga3dv6#

当前答案已过时,重试提交的sha的方式是commit.hexsha

相关问题