Gitlabでlfs

# せっかくのGitlab8系
[前回](http://qiita.com/takara@github/items/06577c49b7e1d3f68102)Gitlabを8系までアップグレードしたので以前にはなかった機能で[lfs](https://git-lfs.github.com/)が8.2から使用できるらしい。これはバイナリファイルが別に管理されリポジトリが重くならないというものらしい。

# インストール
まずはクライアント側にlfsをインストール
自分は大抵クライアント側は```Mac```なので```brew```でインストール

```text:
$ brew update
$ brew install git-lfs
```

# エラー
```git``` 管理のフォルダに移って早速バイナリファイルを作って```push```してみる。


```text:
$ git lfs install
$ git lfs track "*.zip"
$ zip -9 README.zip README.md
$ git add .
$ git commit -m "lfsチェック"
$ git push
master 69456f9] lfsチェック
 2 files changed, 4 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 README.zip
$ git push
Git LFS: (0 of 1 files) 0 B / 182 B                                                                                                                                                                                             
batch request: exit status 1
error: failed to push some refs to 'git@host:taka/test.git'
```

あれ？何故かエラーorz

# lfs.urlが必要！？

ググると、```lfs.url```を設定しないといけない！？

```text:
$ git config --add lfs.url "http://host/taka/test.git/info/lfs"

$ git push
Username for 'http://host': <user>
Password for 'http://user@host':<password> 
Git LFS: (1 of 1 files) 182 B / 182 B                                                                                                                                                                                           
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 503 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@host:taka/test.git
   7c9ab00..69456f9  master -> master
```

今度は上手く行った。

# sshで落としてみる
ローカルに再度取り直してみる

```text:
$ git clone git@host:taka/test.git
Cloning into 'test'...
remote: Counting objects: 73, done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 73 (delta 20), reused 63 (delta 17)
Receiving objects: 100% (73/73), 6.79 KiB | 0 bytes/s, done.
Resolving deltas: 100% (20/20), done.
Checking connectivity... done.
Downloading README.zip (182 B)
Error downloading object: README.zip (7c29c490df3c8da5df78a6259fadb52402be02e38976b6c813e80cc346b00b2a)

Errors logged to /Users/taka/test/.git/lfs/objects/logs/20160903T092512.275224922.log
Use `git lfs logs last` to view the log.
error: external filter git-lfs smudge -- %f failed 2
error: external filter git-lfs smudge -- %f failed
fatal: README.zip: smudge filter lfs failed
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry the checkout with 'git checkout -f HEAD'
```

## どうなっているか見てみる

ちょう面倒な事になっているwww

```text:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	deleted:    .gitattributes
	deleted:    README.md
	deleted:    README.zip

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	.gitattributes
	README.md
```

## リセット

```reset``` して

```
$ git reset .
Unstaged changes after reset:
D	README.zip
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	deleted:    README.zip
```

## 元に戻そうと試みる

バイナリのファイルだけない状態になっているので元に戻そうと試みるが、```clone```の時と同じエラー

```text:
$ git checkout .
Downloading README.zip (182 B)
Error downloading object: README.zip (7c29c490df3c8da5df78a6259fadb52402be02e38976b6c813e80cc346b00b2a)

Errors logged to /Users/taka/test/.git/lfs/objects/logs/20160903T092914.49014792.log
Use `git lfs logs last` to view the log.
error: external filter git-lfs smudge -- %f failed 2
error: external filter git-lfs smudge -- %f failed
fatal: README.zip: smudge filter lfs failed
```

## また設定

```text:
$ git config --add lfs.url "http://host/taka/test.git/info/lfs"

$ git co .
Downloading README.zip (182 B)
```

戻った！！ｗ
うーんσ(—’‘—；)

# httpで落としてみる

```text:
$ git clone http://host/taka/test.git
Cloning into 'test'...
remote: Counting objects: 73, done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 73 (delta 20), reused 63 (delta 17)
Unpacking objects: 100% (73/73), done.
Checking connectivity... done.
Downloading README.zip (182 B)
```

へっ！？すんなり```clone```できたｗ
```lfs.url``` は要らないの！？ｗ

```http``` もしくは```ssh+lfs.url```なのね。。。
これって```lfs```が```http```しか対応していないから？

# そしたら
そしたら最初から```http```で```clone```すれば面倒な事はない！？

```text:
$ git clone http://host/taka/lfs-test.git
Cloning into 'lfs-test'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
$ cd lfs-test/
$ git lfs install
Updated pre-push hook.
Git LFS initialized.
$ git lfs track "*.zip"
Tracking *.zip
$ cp ../test/README.zip .
$ git add .
$ git commit -m "バイナリファイル"
[master (root-commit) df2dde7] バイナリファイル
 2 files changed, 4 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 README.zip
$ git push
Git LFS: (1 of 1 files) 182 B / 182 B                                                                                                                                                                                           
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 424 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To http://host/taka/lfs-test.git
 * [new branch]      master -> master
```

なんか微妙に扱いづらい部分がありますね。
```ssh``` に対応してくれるか、自動で```lfs.url```を追加してくれればいいのに･････(￣。￣ )ﾎﾞｿ...

# 参考サイト
- [GitLab 8.2.1でGitLFSを使ってみる](http://cimadai.hateblo.jp/entry/gitlab_gitlfs)