Git LFS が進んでいるようですが、 git-annex を実験してみました。git-annex はまだ Windows の環境でベータ扱いのようですが…。あまり日本語の記事もなく、手探りで色々と試してみましたが、以下の内容は間違っている可能性があるのでご注意ください。
公式サイトのほうからは Windows のインストーラーが公開されています。これをインストールして使用してみました。自分の環境では、うまくパスが通らなかったため、git-annex が配置された場所に手動でパスを通して動くように変更しています。
その後、公式ページの walkthrough にあった以下のようなコマンドを実行してみました.
$ cd testAnnex $ git init $ git annex init "my laptop"
とりあえず適当に大き目ファイルを追加してみます。
$ git annex add test.iso add test.iso ok (recording state in git...)
そして commit してみます。しかしエラーが出てしまいました。
$ git commit -m 'add test.iso' fatal: This operation must be run in a work tree
これらを調べてみると以下の箇所に説明が書いてありました。
http://git-annex.branchable.com/direct_mode/
Direct Mode の時には git commit, git push などのコマンドが死ぬようで、代わりに git annex sync のコマンドを使用するようにとなっています。通常の使い勝手から大きく変わってしまうので、これはちょっと厳しいです。また、Windows の環境においては常に Direct Mode となるようです。
とりあえず適当な場所をリモートとして追加してみて、syncさせてみようと思います。
$ mkdir /d/bigstore $ cd /d/bigstore $ git init $ git annex init $ cd - $ git remote add bigstore /d/bigstore $ git annex sync commit ok pull bigstore warning: no common commits remote: Counting objects: 5, done. remote: Compressing objects: 100% (3/3), done. remote: Total 5 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (5/5), done. From d:/bigstore * [new branch] git-annex -> bigstore/git-annex ok (merging bigstore/git-annex into git-annex...) (recording state in git...) push bigstore Counting objects: 26, done. Delta compression using up to 8 threads. Compressing objects: 100% (19/19), done. Writing objects: 100% (24/24), 2.34 KiB | 0 bytes/s, done. Total 24 (delta 2), reused 0 (delta 0) To d:/bigstore * [new branch] git-annex -> synced/git-annex * [new branch] annex/direct/master -> synced/master ok
こんな感じで動いたものの bigstore の中へ転送された形跡がありません。そこで調べてみたところ以下のようなオプションを付けるとよいらしいです.
$ git annex sync --content
この結果ファイルが転送されて、先としていたディレクトリの容量も増えることが確認できました。しかしながら取得系が Permissionエラーとかで git annex get がうまく機能しない感じでした。
まとめ
git-annex は2つの git リポジトリの構造をベースとして巨大なファイルをやり取りするシステムのようです。ただし、git の通常のコマンドが使えなくなるため、普段の git 操作とは違ったものとなります。
今回考えていた理想のものが、通常の git コマンドはそのまま使えて、巨大ファイルだけ別処理とするというものだったため、ちょっとこれは使えないなという印象です。