Open4

(obsol.) Reposoup: Bareリポジトリを直接操作する

okuokuokuoku

Git As Databaseをしていると、100万レコードを越えてきたあたりでファイルシステムのオーバヘッドがバカにできなくなってくる。チェックアウトを持たないbareリポジトリを活用してその辺を軽減できないだろうか。

... いやまぁ書き込み側でlibgit2なりなんなりを使うのが最速ではあるけど、ファイルシステムを直接インターフェースとして活用できるのもGit As Databaseの強みなので。。


ここまで書いて、実は worktree とか sparse-checkout でもうやりたいことは大体実現できるからそれで良い気がしてきた。やりたいことに近いのは worktree かな。。

okuokuokuoku

Indexなしでの読み取り

cat-file --filters を使うことで、indexが無くても指定のリビジョンのファイルを取得できる。 ...これ自体は --filters オプションの想定用途ではないように見えるが。。

GIT_DIR=photos.git git cat-file --filters HEAD:filelist.txt

通常のシチュエーションではindexを用意してアクセスした方が良いような気がする。

okuokuokuoku

Indexの生成

read-tree コマンドでindexを生成できる。

GIT_DIR=photos.git GIT_INDEX_FILE=index git read-tree HEAD

ユースケース的には無から生成する方が多い気がする。

GIT_DIR=photos.git GIT_INDEX_FILE=index git read-tree --empty