[Git] GitHub と Bitbucket の Git LFS 対応状況

実務で利用できるか調査。

調査

以前に PSD ファイルのバージョン管理について検討した。

GitHub

その後、GitHub が GitLFS に対応。

無料で 1GB 分のサイズが提供されている。

2016-04-19_gitlfs_01

毎月 $5 追加することで 50GB まで利用できるようになる模様。

2016-04-19_gitlfs_02

直近の小規模サイト制作で受け取った PSD ファイルの総量を確認したところ 17GB であったので微妙なところ。

Bitbucket

残念ながら Cloud サービスには対応していない。

2016-04-19_gitlfs_03

が、Server (オンプレミス型) が、10 ユーザーまで $10 買い切りだった。

適当な環境があれば、これを導入すると良いかも。

Server (オンプレミス型) – 自分の環境にインストール
– ファイヤーウォール内のお好きな環境にインストール
– ライセンスは永久使用可能、保守(サポートとバージョンアップ)更新は1年単位
– アプリケーションの完全なコントロール
– 製品の細かいカスタマイズが可能

アトラシアン製品スタートガイド – アトラシアン パブリック スペース – Atlassian Japan Confluence

対応 OS には、Mac OS X や Windows も含まれている。

2016-04-19_gitlfs_04

使い方

GitHub で試してみる。

サンプルファイルとして、以下を利用する。

インストール

こちらの書籍には GitLFS に関する記述があるよう。

Homebrew で git-lfs をインストール。

% brew install git-lfs

git init

% git init
Initialized empty Git repository in /Users/****/projects/sandbox-gitLFS/.git/

extension をインストールし、.psd ファイルをトラックするように設定を行う。

% git lfs install
Updated pre-push hook.
Git LFS initialized.
% git lfs track "*.psd"
Tracking *.psd

.gitattributes に設定が書き込まれる。

.gitattributes
*.psd filter=lfs diff=lfs merge=lfs -text

git push まで

% git add .
% git commit -m 'Add: Sample PSD file'
[master (root-commit) 992ef94] Add: Sample PSD file
 2 files changed, 4 insertions(+)
 create mode 100644 .gitattributes
 create mode 100755 Adobe_PLAY_Comps.psd
% git push -u origin master
Git LFS: (1 of 1 files) 21.51 MB / 21.51 MB
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 444 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@github.com:DriftwoodJP/sandbox-gitlfs.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

git lfs コマンドで色々確認できる模様。

% git lfs help
git lfs <command> [<args>]
Git LFS is a system for managing and versioning large files in
association with a Git repository.  Instead of storing the large files
within the Git repository as blobs, Git LFS stores special "pointer
files" in the repository, while storing the actual file contents on a
Git LFS server.  The contents of the large file are downloaded
automatically when needed, for example when a Git branch containing
the large file is checked out.
Git LFS works by using a "smudge" filter to look up the large file
contents based on the pointer file, and a "clean" filter to create a
new version of the pointer file when the large file's contents change.
It also uses a pre-push hook to upload the large file contents to
the Git LFS server whenever a commit containing a new large file
version is about to be pushed to the corresponding Git server.
Commands
--------
Like Git, Git LFS commands are separated into high level ("porcelain")
commands and low level ("plumbing") commands.
High level commands
--------------------
* git lfs env:
    Display the Git LFS environment.
* git lfs checkout:
    Populate working copy with real content from Git LFS files
* git lfs fetch:
    Download git LFS files from a remote
* git lfs fsck:
    Check GIT LFS files for consistency.
* git lfs install:
    Install Git LFS configuration.
* git lfs logs:
    Show errors from the git-lfs command.
* git lfs ls-files:
    Show information about Git LFS files in the index and working tree.
* git lfs pull:
    Fetch LFS changes from the remote & checkout any required working tree files
* git lfs push:
    Push queued large files to the Git LFS endpoint.
* git lfs status:
    Show the status of Git LFS files in the working tree.
* git lfs track:
    View or add Git LFS paths to Git attributes.
* git lfs untrack:
    Remove Git LFS paths from Git Attributes.
* git lfs update:
    Update Git hooks for the current Git repository.
Low level commands
-------------------
* git lfs clean:
    Git clean filter that converts large files to pointers.
* git lfs pointer:
    Build and compare pointers.
* git lfs pre-push:
    Git pre-push hook implementation.
* git lfs smudge:
    Git smudge filter that converts pointer in blobs to the actual content.

GitHub 上での表示

プレビューが表示されている。

2016-04-19_gitlfs_05

補遺