2013-04-16 4 views
7

私は大量のgitリポジトリを管理し、主にpythonで書かれたビルドシステムをカスタム化しています。gitは "branch"と "remotes/origin/branch"の間のコミット数を出力することができます

すべてのリポジトリの現在のブランチを報告するコマンドを書いて、 "branch"の頭が "remotes/origin/branch"の頭と同じであるかどうかを報告することができれば、 "

すべてのgitリポジトリ内でシェルコマンドを実行するコマンドがあります。私が探しているのは、単純にgitからフォーマットされた情報をブランチとリモート/オリジン/ブランチ。コミットの差の数または単純なブール値になるようなもの。

この情報をgitから取得する方法は、私がPython側で行う必要がある解析と処理の量を最小限に抑えることでしょうか?

答えて

1

git statusは、リモートトラッキングブランチの前後にコミットする回数を示します。最初にgit fetchを実行する必要があります。そうしなければ、gitは新しいものがリモートにあるかどうかを知ることができないからです。

1

branch場合は、次に

git log --oneline branch..origin/branch 

は、それらの間に1ラインずつコミットを印刷する必要があり、origin/branchの祖先(すなわち高速転送可能)であることが保証されます。あなたは、Pythonまたはwc -lのいずれかの行を数えることができます。

単純で一般的な解が存在するかどうかは不明です。孤児の枝が含まれている場合、origin/branchbranchの共通の祖先はないかもしれません。

18

あなたはgitのの新しい十分なバージョンを持っている場合は、あなたが使用することができます。

$ git rev-list --count --left-right branch...origin/branch 
2 1 

最初の数字の数がbranchをコミットする場合は、先にorigin/branchのであり、第二は、背後にあるコミットの数です。したがって、このブランチにはまだ2つのコミットがありますが、それらはまだアップストリームではありません。また、自分のローカルブランチにまだないコミットアップストリームが1つあります。

--countが導入されたとき、1.6または1.7だったと思います。

関連する問題