libgit2を使用して、次のことと同等のことをしようとしています:
git log -z --all --topo-order
1) すべての参照を revwalker にプッシュする最も簡単な方法を見つけ、2) 同じ順序で結果を取得することに問題があります。トポロジカルソートと時間ソートのさまざまな組み合わせを試してみましたが、古いブランチが上部近くに表示され続けています。
私の最近の試みには の呼び出しgit_revwalk_push_glob(walk, "refs/*")
が含まれていましたが、すべてのブランチが出てきたわけではありません。1 つのテスト リポジトリには 2 つのローカル ブランチがあり、1 つ (現在のブランチ) がありませんでした。
私は実際に客観的な git でこれを行っていますが、GTEnumerator インターフェイスは少し制限されているため、拡張する必要があります。
更新:私は手動で refs/heads、refs/remotes、および refs/tags をプッシュしました (実際にはトップ以上のものを必要とするため、すべての stash も同様です)。順序の問題は残ります。