リポジトリの初期コミットを参照する必要があるスクリプトがあります。 gitには特別な参照HEAD
がありますが、対応するTAIL
はありません。 git help rev-parse
で私に役立つと思われるものが見つかりません。
これが私がやりたいことです:
git show TAIL
ここに私が持っている1つのオプションがあります:
git show `git log --reverse | if read a commit ; then echo $commit ; fi`
それはかなりハックで、git logの出力が変わらないことに依存します。
今のところ、最初のコミットにタグを付けて、それをrefspecとして使用しています。ただし、一般的なツールをリリースしたいので、それは素晴らしいオプションではありません。
スクリプティングにgit-logを使用しないでください。指定されたカスタム形式( "--format =<sth>」オプション)。
あなたの質問には追加の問題があります:複数リポジトリにそのようなTAILルートコミット(親なしコミット)が存在する可能性があります(たとえ「html」、「man」、 git.gitリポジトリの「todo」)。これは通常、個別のプロジェクトを1つに結合するか、個別に開発されたサブプロジェクトのサブツリーマージを使用した結果です。
たとえば、gitリポジトリには6つのルートコミットがあります:git-gui、gitk(サブツリーマージ)、gitweb(マージ、個別に開発されなくなりました)、gitメールツール(プロジェクト履歴の非常に早い段階でマージ)、およびp4-fast-export(おそらく偶然)。これは、「html」および「man」ブランチ、事前に生成されたドキュメントを含む「コンビニエンス」ブランチ、TODOリストおよびスクリプトを含む「todo」ブランチのルートをカウントしません。
Git 1.7.4.2以降を使用している場合は、--max-parents
オプション:
$ git rev-list --max-parents=0 HEAD
それ以外の場合、以下を使用して、現在のブランチからアクセス可能なすべての親なし(ルート)コミットのリストを取得できます。
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
git rev-list HEAD | tail -n 1
はより安定したオプションです。