0

我想使用 dulwich 从 Python 脚本执行以下命令:

$ git branch --contains <myCommitSha> | wc -l

我打算检查一个特定的提交(sha)是否放置在多个分支中。

当然,我认为我可以从 Python 执行上述命令并解析输出(解析分支数),但这是不得已的解决方案。

还有其他想法/意见吗?提前致谢。

4

4 回答 4

8

以防万一有人想知道现在如何使用 gitpython 执行此操作:

repo.git.branch('--contains', YOURSHA)
于 2019-03-14T11:42:13.450 回答
2

由于分支只是指向随机提交的指针,并且它们不会以任何方式“描述”树,因此没有任何东西将一些随机提交链接分支。

如果给定的提交是某个提交的祖先,那么我将采取的唯一明智的方法是从分支顶部提交向下遍历所有祖先链。

换句话说,在德威我会遍历分支并向后遍历以查看链上是否有 sha。

我相当肯定这正是git branch --contains <myCommitSha>我不知道任何其他捷径​​的作用。

由于您的选择是 (a) 让 python 进行迭代或 (b) 让 C 进行相同的迭代,所以我会选择 C。:)

于 2013-01-25T11:18:45.757 回答
1

没有内置函数,但你当然可以自己实现。

你也可以这样做(未经测试):

branches = [ref for ref in repo.refs.keys("refs/heads/") if
            any((True for commit in repo.get_walker(include=[repo.refs[ref]])
                 if commit.id == YOURSHA))]

这将为您提供包含给定提交的所有分支头的列表,但运行时间为O(n*m)n表示您的仓库中的提交数量,m表示分支的数量。git 实现的运行时间可能为O(n)

于 2013-01-25T14:38:18.790 回答
0

如果有人使用 GitPython 并想要所有分支

import git
gLocal = git.Git("<LocalRepoLocation>")
gLocal.branch('-a','--contains', '<CommitSHA>').split('\n')
于 2022-02-24T21:46:22.157 回答