Git LFS lockを使うためのエイリアス メモ


Git LFS(2.4系)のロック機能は、以下の点であんまりイケてないです。

  • 自分の持ってるすべてのロックを一気に外す方法がない
    • 外すのに軽いシェル芸が要る
    • git lfs locks | grep [my-git-user-name] | cut -f 1 | xargs git lfs unlock みたいな
  • lock/unlockコマンドの引数にファイルを1つしか指定できない
    • 例えば、 git lfs unlock A.xlsx B.xlsx すると、エラーを吐かずにA.xlsxだけロックが外れる。
  • lock/unlockのコマンドに lfs が入っていて、長い。 ex) git lfs lock A.xlsx

せめてコマンドインターフェースだけでも解決するためaliasを書いたので共有しておきます。

git.config
[alias]
        lock = "!f(){ git pull ; for file in \"$@\"; do git lfs lock $file; done };f"
        unlock = "!f(){ for file in \"$@\"; do git lfs unlock $file; done };f"
        unlockall = "!f() { git lfs locks | grep [my-git-user-name] | cut -f 1 | while read -r file; do git lfs unlock $file; done; };f"
        locks = "!f() { git lfs locks; };f"

# [my-git-user-name] は、自分のアカウント名に書き換えてください。
$ git lock A.xlsx B.xlsx #2つのファイルのlockを取る(ファイル数だけlockリクエストが走る)
$ git unlock A.xlsx B.xlsx #2つのファイルのlockを外す
$ git unlockall #自分の持っているすべてのlockを外す
$ git locks #全員のlock状況を見る

GitHub+Bashのみでテストしてあります。