

gitで動画などを使ってしまうとsourcetreeが肥大化して動かなくなることがあります。

ネットで検索するとgitmediaがいいと書いてありますが、どのように解決しているのでしょうか。


CC BY-SA 3.0
2014-12-17T05:21:03.680
1869
2015-10-24T18:33:42.280
2015-10-23T23:32:19.737
754
4454
question
git
gitでバイナリ―ファイルを処理したい場合の方法とは？


以下のような状況であることを想定して回答します。

  * Web開発のプロジェクトで画像や動画などがたくさんある。
  * 画像や動画の編集はソースコードとは別管理であり、ソースツリー上にはファイナライズしたもののみ置いている。
  * gitで管理したい主な対象はソースコードである

※動画を管理することが主目的でソースコードを管理することが二の次であればこの回答は無視してください。

# 案1

ファイル数が多いものの、gitで処理しきれないレベルではないのであれば[submodule](http://qiita.com/sotarok/items/0d525e568a6088f6f6bb)で別管理にする。

大量に画像があるような状況で「画像の履歴はそこまでリアルタイムで追従しなくていい」のであれば、画像のディレクトリをsubmodule化し、気が向いたときにsubmodule側をpullすれば開発時にpullに時間がかかるなどの問題は回避できるかと。

# 案2

gitで処理しきれないレベルであれば **gitで管理しない** 。

git管理下から外して構成管理などの別レイヤーの話として扱うが楽です。

  * 開発中はWebサーバ側で/movie/などの巨大ファイルが入ったディレクトリはNFSのディレクトリを参照させる。(NFS上には常に最新しかおかない)
  * 本番環境へのリリースで、リリース時に存在するファイルの履歴を残したいのであれば、chefやスクリプトを駆使すれば自動化までどうにでもなる。
  * gitと連動して何かさせたい要件があれば[Gitフック](http://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF)などを使う。

「どんな用途でどの程度のプライオリティでその動画を管理したいのか？」というところで対処方法も変わりますが、基本gitのリポジトリ外におくことがベストだと思います。


CC BY-SA 3.0
2014-12-21T14:10:25.257
2332
2014-12-21T14:45:46.260
2014-12-21T14:45:46.260
5359
5359
1869
answer


何人かおっしゃっているように、動画は git で扱わないほうがいい、という話はありますが。  
それでも git で動画のバージョン管理を行いたいんだ！ということであれば、それはつまり、次のことを意味すると思います。

一度コミットされた動画いつでも復元することができる <-> 一度コミットされた動画は未来永劫削除されない

その、デメリット側(動画がじゃんじゃか堆積していくことによるスペースリソースの圧迫)を許容できるのならば、 git-media
などを使うのも選択肢になります。

* * *

git-media などは、簡単にいうと、巨大なファイルが歴史に追加されようとした際には、そのファイルをどこか他のところに保存しておき、そこへのリンクのみを
git の歴史として保持しておく、ことによって動作します。

これによって、例えば clone して checkout するときには、巨大オブジェクトが存在しない歴史 + 現在のレビジョンの巨大オブジェクト
だけを取得すればよく、わりと取り回しはよくなります。

さて、巨大ファイルはどこに保存されていくかですが、S3
や、適当なファイル置き場(rsyncで接続)に置かれていきます。これはもちろん、どんどん大きくなります。

* * *

git media が解決するのは、 sourceTree
が肥大化することによる、レポジトリの取り回しの悪さであって、「保管しているファイルのサイズの総計が莫大になる問題」ではないことが注意です。


CC BY-SA 3.0
2015-10-23T19:28:35.637
17995
2015-10-24T18:33:42.280
2015-10-24T18:33:42.280
754
754
1869
answer


Git Large File Storage を使うのが良いかと思います。

Git Large File
Storageとは、Gitワークフロー内での“オーディオサンプルやデータセット、グラフィック、ビデオなど、大容量のバイナリファイル組込み”の改善を目的とした，オープンソースのGitエクステンション
だそうです。

>
> 料金は1GBまでは無料。50GBが月額5ドルから。転送料金も別途設定されているため、詳しくは[料金表](https://github.com/pricing)を参照してください。

とのことです。

参考：  
GitHub、Gitで画像や動画など大容量ファイルを扱える「Git LFS」（Git Large File Storage）正式リリース －
Publickey <http://www.publickey1.jp/blog/15/git_lfs.html>  
Git Large File Storage <https://git-lfs.github.com/>


CC BY-SA 3.0
2015-10-24T13:12:26.717
18024
2015-10-24T13:12:26.717
7641
1869
answer