Git Large File Storage (LFS) に対応しました

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 管理になっているファイルも自動的に取得されるようになっています。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です