使用Python dulwich检查哪些分支包含特定的git commit sha?

时间:2013-01-25 07:31:29

标签: python git python-3.x python-2.7 dulwich

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

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

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

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

还有其他想法/评论吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

由于分支只是指向随机提交的指针而且它们没有以任何方式“描述”树,因此没有任何内容可以链接一些随机提交 TO 分支。

如果一个给定的提交是一个提交的祖先,我会采取唯一合理的方式来查找某个分支点是从分支顶部提交遍历所有祖先链。

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

我确信这正是git branch --contains <myCommitSha>所做的,因为我不知道任何其他捷径​​。

由于您的选择是(a)让python做迭代或(b)让C进行相同的迭代,我只是选择C.:)

答案 1 :(得分: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)的运行时。

答案 2 :(得分:0)

以防万一有人想知道现在如何使用gitpython做到这一点:

repo.git.branch('--contains', YOURSHA)