それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

git lfs でバイナリファイルをバージョン管理できるようにする

git レポジトリに大きめのファイルを突っ込みたい。

動画の素材ファイルや、画像の素材ファイルとか、Sketch とか figma のデータそのままとか、コンパイルしたExecをそのままとか、考えるの面倒くさいのでどっかに放り込んでいきたい。

google drive に放り込んでいたけど、バージョン管理に時間制限があって、30日前になる。かといってDropboxまで追加で契約すのも面倒くさい。Evernoteは添付ファイルに容量制限があるし。

git lfs でバイナリ用のバージョン管理をする。

git lfs がありまして、 git large file storage の略ですね。比較的大きめのファイルをまとめてツッコんでgit と連携させることが出来る github製のツールです。

github 以外でも bitbucketや gitlab で利用できます。

f:id:takuya_1st:20180103205002p:plain

使い方:クライアント

大きめのファイルをツッコんだら自動的にGit LFS になる。なんてことはない。このファイルはLFS管理しますよって設定が必要

なので、最初に このコマンドを突っ込む

git lfs install 

lfs のインストール

といっても、git lfs は git に同梱されておらず。別途インストールが必要。

brew install git-lfs

はじめの一歩

git lfs をインストール後に、レポジトリでlfs を有効にする、対象の拡張子を指定し設定する。そしてgitattributesを追加してcommit する。

git clone URL
cd REPO
git lfs install                #
git lfs track '*.psd'     # ここがlfs 特有の箇所
git add .gitattributes  #
git commit -m 'my commit comment'
git push origin master

git lfs install でlfs 初期設定

lfs install すると .git ディレクトリ内部に、lfs の管理フォルダが生成される

takuya@sample001$ find  .git/
/Users/takuya/.bin/find .git/ -mindepth 1 -not -iwholename '*/.git/*'
.git/config
.git/description
.git/HEAD
.git/info
.git/info/exclude
## ↓この辺が作られる
.git/lfs
.git/lfs/objects
.git/lfs/objects/logs
.git/lfs/tmp
.git/lfs/tmp/objects
.git/objects
.git/objects/info
.git/objects/pack
.git/refs
.git/refs/heads
.git/refs/tags

git lfs track でLFSの管理にするファイルのパターンをしてい、その設定が gitattributeに記述されるので、それを追加する。

git lfs track '*.rar' をした場合

gitattributes ファイルに、どのファイルをLFS対象にするか設定が書かれる。

takuya@sample001$ grep rar -R   .
./.gitattributes:1:*.rar filter=lfs diff=lfs merge=lfs -text

すでに設定があるので、重複したtrackも検出される。

takuya@sample001$ git lfs track '*.rar'
"*.rar" already supported

あとは commit

gitattributes も忘れずにコミットしないとね。

gitlab の場合

gitlab で git lfs を使う場合は、 lfs.url を追加しておく必要があった

git clone URL
cd REPO
git lfs install                
git config --add lfs.url https://example.com/takuya/sample01.git/info/lfs
git lfs track '*.psd'     
git add .gitattributes  
git commit -m 'my commit comment'
git push origin master

git lab のレポジトリURLの末尾に、 reponame.git/info/lfs を加えたものを追加した。

gitlab 側の設定

omni gitlab CE側では LFSを受け取れるように設定する必要があった。

### Git LFS
gitlab_rails['lfs_enabled'] = true
gitlab_rails['lfs_storage_path'] = "/var/opt/gitlab-lfs" 

lfs_storage_pathは自分で指定しておく必要がある。 reconfigure した時に、生成されパーミッションが設定された。

LargeFileが入ってくるところなので、それなりに安心して置いて置ける場所がいいと思う。

ディレクトリ設定に注意が必要だった。 ディレクトリは、gitlab レポジトリと別に設定できるので、管理対象として認識する必要がある。

ディレクトリを追加してるので、バックアップや移動時やDocker起動してるときに面倒だな

2018-01-03 追記

git config --add lfs.url は無くても動いた。