0

dulwich を使用して Python スクリプトから次のコマンドを実行したいと思います。

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

私が意図しているのは、特定のコミット (sha) が複数のブランチに配置されているかどうかを確認することです。

もちろんPythonから上記のコマンドを実行して出力を解析(分岐数を解析)すればいいと思っていたのですが、それは最終手段です。

他のアイデア/コメントはありますか?前もって感謝します。

4

4 に答える 4

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 に答える