2020年5月22日金曜日

Gitlab で git lfs を使ってみた

概要

git-lfs は大きいファイルをリポジトリ以外の場所で管理することができる機能です
例えば git-lfs の対象にしたファイルを S3 などで管理することができます

Gitlab はデフォルトで git lfs が使えるようになっています
今回はクライアント側で git-lfs のインストールから実際に push して動作確認するところまでやってみました
なお今回使用する Gitlab は過去にソースコードからインストールした 13.0 のバージョンを使います

環境

  • GitLab Enterprise Edition 13.0.0-pre 52c7947911d
  • macOS 10.15.4
  • git-lfs 2.11.0

git-lfs のインストール

クライアントマシンに git-lfs をインストールします
git-lfs はリポジトリに対してクライアント側で設定します

  • brew install git-lfs

適当にリポジトリを clone

  • git clone http://gitlab.example.com/root/test.git

リポジトリで git lfs を有効にする

git-lfs を使いたい場合は必ず install する必要があります

  • cd test
  • git lfs install

サイズの大きいファイルを作成して push してみる

今回は 1GB のファイルを作成します
大きいサイズのファイルがあればそれを使っても OK です

  • dd if=/dev/zero of=test_file bs=1024k count=1000
  • git lfs track "test_file"

作成した test_file を git-lfs の対象にします
git lfs track すると .gitattributes も同時に作成できるのでこれも追加します

  • git add .

ちなみに git lfs status すると対象のファイルを確認できます

On branch master Objects to be pushed to origin/master:   Objects to be committed:   .gitattributes (Git: 5c5b0b5) my_file (LFS: da87281)   Objects not staged for commit:
  • git config lfs.http://gitlab.example.com/root/test.git/info/lfs.locksverify true
  • git commit -m "git-lfs test"
  • git push -u origin master

動作確認

まず Gitlab の WebUI を確認すると対象のファイルが git-lfs 配下で管理されていることが確認できます

次に新たに clone してみます
すると 2 回認証することになると思います
2 回目は git-lfs の認証になるのでそれに成功すると git-lfs の対象のファイルを clone することができます

S3 などにする場合は

デフォルトだと localhost の /home/git/gitlab/shared/lfs-objects というパスで管理されています
パスを変更したり S3 にしたい場合は gitlab/config/gitlab.ymllfs の項目を変更してプロセスを再起動すれば OK です

トラブルシューティング

push 時に HTTP 413 になる場合

/etc/nginx/sites-available/gitlab の設定は Gitlab 13.0 では デフォルトで client_max_body_size 0 になっています
git config lfs.http://gitlab.example.com/root/test.git/info/lfs.locksverify true を実行した際にホスト名などが間違っていないか確認しましょう

あとは push する際のパスワードがあっているか確認しましょう
Gitlab の WebUI にログインする際のパスワードではなく Access Token などを使ってみてください
https://gitlab.com/gitlab-com/support-forum/-/issues/980

もしくは git config の remote の URL を http://gitlab.example.com/root/test.git から http://root:xxxxxx@gitlab.example.com/root/test.git という感じでユーザ名とパスワードを指定するようにしてください

あとは単純にディスクのスペースが空いているか確認しましょう
/var/log/nginx/gitlab_error.log あたりのログに No space left on device というエラーログが出ている場合があります

パスワードを 3 回求めてくる場合は

  • git config lfs.cachecredentials true

最後に

Gitlab で git-lfs を使ってみました
Gitlab 側はデフォルトで有効になっているであとはクライアント側で設定するだけですが Gitlab の場合認証部分で少してこづるかもしれません
特に 413 エラーは検索してみるとわかりますが多くの人が遭遇しているエラーかなと思いました

参考サイト

0 件のコメント:

コメントを投稿