tracpath (トラックパス) は Git Large File Storage (LFS) に対応いたしました。tracpath でこれから作成する Git リポジトリはもちろん Git LFS 機能を利用できますし、すでに作成済みの Git リポジトリでも利用することができます。また、Git LFS ファイルロック機能に対応しています。
Git LFS について
Git リポジトリは差分があまり意味をなさないバイナリファイルの扱いを得意とはしていません。特にファイルサイズが大きいとリポジトリ自体のサイズが肥大化し git {clone,fetch,pull}
などの操作に時間を要するようになります。
Git LFS ではそれらのファイルを別管理するように指示すること (git lfs track '*.ext'
) でリポジトリとは別の領域にファイルの実体を保存するようになり、リポジトリの肥大化を避けるようになっています。リポジトリにはファイルの実体の代わりにポインタになるファイルが登録され、この内容に基づいて git-lfs
コマンドがファイルの実体を自動的に取り出してくれます。
Git LFS 対応クライアント
Debian, Ubuntu, RHEL/CentOS, Mac OS X などは https://github.com/git-lfs/git-lfs/wiki/Installation を参照してください。
Git LFS チュートリアル
ここではコマンドライン版 git での手順を説明します。
1. git-lfs コマンドのインストール
上記の対応クライアントからインストールを行ってください。
2. Git LFS 初期設定を行う
Git LFS 機能に必要な初期設定を行うために git lfs install
を実行します。デフォルトでは ~/.gitconfig
に設定が追加されます。そのため、この操作は一度だけ実施すれば問題ありません。
$ git lfs install
Updated git hooks.
Git LFS initialized.
3. リポジトリ作成後 git clone を行う
Git リポジトリを作成後 git clone
を行います。
$ git clone https://xx.tracpath.com/git/git-lfs-demo
Cloning into 'git-lfs-demo'...
Username for 'https://xx.tracpath.com': user1
Password for 'https://user1@xx.tracpath.com':
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
4. Git LFS の対象ファイルを指定する
ここでは Excel ファイルを対象になるようにしてみます。
$ git lfs track '*.xlsx'
Tracking "*.xlsx"
このコマンドにより .gitattributes
ファイルが変更されるので、git add
して git commit
します。
$ git status
On branch master
Initial commit
Untracked files:
(use "git add ..." to include in what will be committed)
.gitattributes
nothing added to commit but untracked files present (use "git add" to track)
$ git commit -m 'Add *.xlsx to tracked paths'
[master (root-commit) 65ce59824] Add *.xlsx to tracked paths
1 file changed, 1 insertion(+)
create mode 100644 .gitattributes
あとは git-lfs コマンドが必要なときに処理を行ってくれます。
5. LFS 対象ファイルをコミット・プッシュする
Excel ファイルを追加してコミットします。
$ git add -- カスタムクエリ.xlsx
$ git commit -m 'Add an excel file'
[master 116138f5c] Add an excel file
1 file changed, 3 insertions(+)
create mode 100644 カスタムクエリ.xlsx
ここで、コミットした内容を見てみます。
$ git show
commit 116138f5c5996b6e1fc4ea8319fb4705014b8193
Author: user1 <noreply@tracpath.com>
Date: Fri Jan 26 18:21:32 2018 +0900
Add an excel file
diff --git a/カスタムクエリ.xlsx b/カスタムクエリ.xlsx
new file mode 100644
index 000000000..98d08299f
--- /dev/null
+++ b/カスタムクエリ.xlsx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b7d080a3c84120e22eb9cfa013afe0ba0ecb61a8c81bf39bf665e226e74d738
+size 168119
コミット内容を見ると Excel ファイルの代わりに version https://git-lfs.github.com/spec/v1
で始まる小さなファイルになっているのが確認できます。これがポインタファイルです。
これでプッシュしてみます。
$ git push origin master
Locking support detected on remote "origin". Consider enabling it with:
$ git config lfs.https://xx.tracpath.com/git/git-lfs-demo.git/info/lfs.locksverify true
Git LFS: (1 of 1 files) 164.18 KB / 164.18 KB
Counting objects: 6, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 647 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://xx.tracpath.com/git/git-lfs-demo
* [new branch] master -> master
Git LFS: (1 of 1 files) 164.18 KB / 164.18 KB
という出力がありますが、これが git-lfs コマンドによりファイルの実体を送信しているものです。
6. この状態から git clone を行う
このリポジトリが Git LFS 機能でファイル管理を行っている状態になっています。ここから別ディレクトリなどで git clone
を行ってみます。
$ git clone https://xx.tracpath.com/git/git-lfs-demo
Cloning into 'git-lfs-demo'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
Checking connectivity... done.
Downloading カスタムクエリ.xlsx (168 KB)
$ cd git-lfs-demo
$ ls -l
-rw-r--r-- 1 noreply noreply 168119 Jan 26 18:35 カスタムクエリ.xlsx
Downloading カスタムクエリ.xlsx
という出力の通り、Git LFS 管理になっているファイルも自動的に取得されるようになっています。