1

1分間に10〜30回、単一の大きなリポジトリでgitrev-listを呼び出すツールが本番環境にあります。gitの応答時間は、約1秒から最大50秒まで大きく異なります(タイムアウトメカニズムがgit要求を放棄する前)。

git rev-list --pretty=raw 2ef9fa0d0fa4c34d57103a0545b3cc96c2552e6f..f5daa48ebcd3cc95a0df683f8c3a3ad64def4a6e

目標は、2つのコミットが祖先/子孫であるかどうかを確認することです。そうである場合は、2つのコミットのどちらが祖先であるかを確認します。この呼び出しを1回行います。出力が得られた場合は答えがあり、出力がない場合はコミット位置を入れ替えて再度実行します。今回出力がない場合、それらは互いの祖先/子孫ではありません。

この情報を見つけるための別のより効率的な方法はありますか?それに関しては、git以外の構造でコミットツリーをモデル化するための提案でさえも高く評価されています。

ありがとう。

4

2 に答える 2

1

を見てくださいgit merge-base first-sha1 second-sha1。結果が 3 番目の sha1 である場合、それらは子孫ではありません。それ以外の場合、結果は古い祖先になります。

ただし、ワークフローの一部をより高いレベルで説明できる場合は、おそらくもっと簡単な方法があり、これに頼る必要はないかもしれません。Branch per Feature についてこの記事を書きました: http://dymitruk.com/blog/2012/02/05/branch-per-feature/いくつかのアイデアが得られるかもしれません。

于 2012-10-06T03:18:11.860 に答える