ascii/textのあるgitブランチ内のすべてのファイルを、の裸の gitリポジトリから探して、その合計サイズを追加したいとします。gitオブジェクトのファイルタイプ(ascii、バイナリなど)をテストするにはどうしたらいいですか?
これは裸のレポであるため、作業ツリーがなく、単にブランチをチェックアウトしてファイルを直接テストするという解決策は機能しません。これらのリポジトリの数は数百GBに達し、このタスクの目的では読み取り専用です。つまり、作業ツリーの作成はオプションではなく、リポジトリのサイズはそれぞれのコピーを作成し、コピー内に作業ツリーを作成することは実用的ではありません。
私はそうのような裸のgitリポジトリ内の特定のブランチに属するすべてのオブジェクトを一覧表示することができます:
git ls-tree -r master --long
これは私のオブジェクトのハッシュ与える:私が欲しい上記の例で
100644 blob 486a23256c437b811b5647e40517a35964f60dc6 42 file1.txt
100644 blob f7b528c3a1412c12213e56394b679397bd4ecaa7 131 file2.xml
100644 blob 773c90bbb7ab5552d47ce2fb153fc9d18ed0d386 5617 file3.jpg
100644 blob 420cb792e80a97c89db9c9d7339b4fb9a680aa43 13130 file3.zip
を最初の2つの平文オブジェクトしか取得できませんが、ファイルタイプのオブジェクト自体をテストする方法はわかりません。
レポが裸でない場合、これは 'git ls-files --eol'です。 –
@JoshLee:これは裸のリポジトリ(インデックスを持っています!)で... 'git read-tree'そして 'git ls-files --eol'を実行します。注意:インデックスを使ってデプロイメントを追跡している場合(例えば、受信後のフックで 'git --work-tree = ... checkout')、このために一時インデックスを使いたいかもしれません。 –
torek
@torek私が正しく理解していれば、 'git read-tree'は一時的な/キャッシュされたインデックスを作成しますか?私はこれがどこに保存されているか書き込まれているかを調べようとしています。 'git read-tree -empty'でクリアできるようですが、その情報が最初の場所に格納されている場所が不思議です。 –
daveruinseverything