LoginSignup
17
13

More than 5 years have passed since last update.

GitでVisual Source Safeの使い勝手を再現する!ロック機能

Posted at

Git LFSが2.0になり、ロック機能とやらが実装されました。github.comではすでに使えるようになっています。GitHub Enterpriseでも、最新の2.10にはいつの間にか来ています。忍び寄るロック機能! GitLabBitBucketはまだのようです。

Git!

なのに!

ロック!

まさにあれの再来ですよね。実際にこのロック機能を激しく使ってみたわけではないのですが、ソースコードを読んだりしてなんとなく概要を把握したのでざっと書いてみます。

一次情報は次のWikiですね。

ロック機能を有効にする

Git LFSの機能の一部ですので、Git LFSを有効化しますが、その時にオプションを付与します。

$ git lfs track "*.png" --lockable

この --lockable がポイントです。
ちなみにこれを付けると、リポジトリ内のすべての該当ファイルがフルオートで 読み込み専用(444)になります 。ワクワクしてきますね!

なお、この情報は .gitattributes ファイルに書き込まれます。テキストファイルなので自分でて修正もできますが、読み込み専用にするのがポイントっぽいです。

なお、Git LFSのファイルポインタ方式のバイナリデータ管理は使いたくないんだけど、ロックだけは可能にしたい場合は .gitattributes ファイルを手修正して設定を追加すればいいらしいです。(上記のコマンドだとファイル変換のフィルタまで設定されてしまう)

*.yml lockable

ロック機能を使う

次のようにコマンドを実行します。
読み込み専用状態が「ロック状態」なのではなく、読み込み専用なのがデフォルト状態で「ロック状態」は自分だけにファイルの書き込み権限があるというステータスです。最初わかりませんでした。次のように実行すると、644となります。ロックというとあれですが、VSSのチェックアウトと考えれば、おっさんたちはピンと来ると思います。僕もピンと来ました。

$ git lfs lock sample.png

この状態で編集してコミットすればOKです。で、使い終わったら次のコマンドを実行します。

$ git lfs unlock sample.png

これでロック解除ができます。

ロックした人がそのまま風邪引いて会社来なくなったら?

FAQですね。次のように --force で強制解除できるので、いざとなったら解除できちゃいます。あの「帰る前にきちんと忘れずにチェックインしないと!!!」というハラハラ・ドキドキは味わえません。残念。

$ git lfs unlock sample.png --force

複数人を調停する仕組み

積極的に「いまこのファイルがロックされているからお前に編集するなよ」みたいなのを通知するような機能はありません。
現在ロックされているファイル一覧は次のコマンドで取得できますが、すぱっと高速には帰ってこなくて、数秒かかっています。常駐して頻繁に呼び出してNotificationを出す、という感じではなさそうです。

$ git lfs locks
filesystem/filesystem.png   shibukawa   ID:1535
filesystem2/watcher.png     shibukawa   ID:1536
index.rst                   shibukawa   ID:1534

ロックすると .git/lfs/lockcache.db というファイルができます。git-lfsって独自のキーバーリューストアの実装を持っているんですね。そのファイル形式です。ですが、このファイルを何らかの形で同期をとったりとかはしてなくて、これはあくまでもローカルのキャッシュです。

実際には単純で、lockサブコマンドを実行したタイミングでサーバーの /locks エンドポイントにファイルパスを送りつけて、ロックを作成します。同名ファイルを実行するとエラーになるので、早く実行したもの勝ちというただそれだけです。

実際には、Slack botかなにかで、ロック情報のイベントをgithubから取得して流してあげるだけでも体感上は必要十分な感じになるのかなって思います。

まとめ

ドキドキ・ワクワクはありませんが、バイナリファイルの編集のコンフリクトを避けるロック機能の紹介でした。

17
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
13