Visual Studio OnlineでGit LFSを使ってみた

Visual Studio OnlineがGit LFSに対応したようなので使ってみた。

Git LFSとは

過去記事を参照

Visual Studio Online側の準備

Gitのリポジトリを作るだけです。

Visual Studio OnlineのGitリポジトリをVisual Studio以外からチェックアウトする方法 – 眠るシーラカンスと水底のプログラマー

あと、gitコマンドからは直接Microsoft Accountや企業アカウントからGitリポジトリにログインできないので、上の西村さんの記事を参考にそれらに依存しない二つ目のIDとパスワードを作成しておきます。

クライアント側の操作

bashのコンソールを起動して、作成したVisual Studio Onlineのリポジトリをクローンします。

クローンしたら、そのディレクトリに移動して、git-lfsのinitコマンドでLFSを初期化します。

$ git lfs init
Updated pre-push hook.
Git LFS initialized.

次にlfsの対象となるファイルを設定します。git-lfsのtrackコマンドを使用します。

下の例ではjpgと言う拡張子を持つ全てのファイルを対象にしています。

$ git lfs track "*.jpg"
Tracking *.jpg

trackコマンド設定した内容は、実際には.gitattributeファイルに保存されます。.gitattributeファイルが無ければ作成されます。

$ cat .gitattributes
*.jpg filter=lfs diff=lfs merge=lfs -text

では、実際にディレクトリに適当なJPEGファイルをコピーします。

以下のような感じです。

$ git status
On branch master

Initial commit

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

        .gitattributes
        うますぎるやろーこれうますぎるやろー.jpg

nothing added to commit but untracked files present (use "git add" to track)

ではまず、addしてcomittします。

$ git add --all
$ git commit -m "最初のコミット"
[master (root-commit) 0f2e434] 最初のコミット
 2 files changed, 4 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 うますぎるやろーこれうますぎるやろー.jpg

VSOのリポジトリにpushします。

$ git push origin master
(1 of 1 files) 10.57 KB / 10.57 KB
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 457 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: Analyzing objects... (4/4) (2 ms)
remote: Storing packfile... done (124 ms)
remote: Storing index... done (57 ms)
To https://ishisaka.visualstudio.com/DefaultCollection/GitTest/_git/GitTest2
 * [new branch]      master -> master

無事push出来ました。

VSO側でpushしたJPEGファイルを見てみましょう。

SnapCrab_NoName_2015-10-6_22-32-10_No-00

JPEGファイルだとファイル内容がブラウズ出来るはずですが、VSOのリポジトリブラウザでは出来ません。これはLFSによってちゃんとJPEGファイルがリポジトリの外側に保存されているためです。VSO的にはもう少し表示に一工夫欲しいところではあります。

試しに、このリポジトリを別の場所でCloneすれば正しくJPEGファイルが入手できるのが解るはずです。

現在LFSにどのファイルがトラックされているかは以下のようls-filesコマンドで確認できます。

$ git lfs ls-files
0fef378be8 * うますぎるやろーこれうますぎるやろー.jpg

注意点

現状WindowsではGit for Windowsがセットアップする標準コンソールかmintty上のbash上でしか正しく動作しません。同じようにbashを使っているはずのconemu上のbashやコンソールプログラム自体に関係なくcmd.exe、Powershell上ではgit lfsでpushしたときに延々応答が無くなってpushが成功しません(12時間ほど放置しましたが動作継続したままです)。現状git-lfs側の問題なのか、VSO側の実装の問題なのかよくわかっていませんが、標準インストールされるbash上でpushする方が無難だと思います。また、しつこくユーザー名とパスワードを聞かれるので、この辺もめげずに入れましょう。(この辺で何となくVSOの実装が疑わしい)

という事で、何となくまだ地雷って感じのVSO + Git LFSですが、お互いに少しずつよくなっていくのではないでしょうか。

まぁそれでも沢山の画像その他バイナリの大きめのファイルがいっぱいあるプロジェクトではGitの動作が快適なるでしょうし、リポジトリのサイズも軽く行けるので、その辺お悩みの方は一度試してみてみられるのがよろしいのではないでしょうか。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください