LoginSignup
4
4

More than 5 years have passed since last update.

git-lfsでコンフリクトしたらどうなるか

Posted at

git-lfsで、コンフリクトさせてみると以下のようなファイルができます。

version https://git-lfs.github.com/spec/v1
<<<<<<< HEAD
oid sha256:143976a5f15427e0f66e4285092df0691ba234ffdcf1fbea0927d4b055630471
size 11434893
=======
oid sha256:2b91d9f8ec063a318089974bfb19893f61752c6126449b137b5b531b562ebabf
size 11566529
>>>>>>> origin/master

で、この状態で、新旧のバイナリを比較してみてみたいですよね?

$ GIT_LFS_SKIP_SMUDGE=1 git checkout --theirs conflict.mp3

まずはこれでポインタファイル(最初に引用したgit-lfsのバージョン、oid、sizeが入ったファイル)のコンフリクトしてない状態にしておいて、次のコマンドを起動します。そうすると、lfsのファイル置き場にファイルが入ります。

ポインタファイルはテキスト処理的に作ってもOK(そっちの方がワークフォルダをいじらなくてすむ)

# バイナリファイルの実態の置き場を作る
$ mkdir -p .git/lfs/objects/2b/91
# ここでダウンロード発動
$ git lfs smudge --info conflict.mp3 < conflict.mp3 > .git/lfs/objects/2b/91/2b91d9f8ec063a318089974bfb19893f61752c6126449b137b5b531b562ebabf

最初のファイルの両方のoidをコピーしてくれば、ファイルの実態にアクセスできるので、比較できますよね。

ワークファイルをがんがん書き換えてよければ、単純に次のコマンドをそれぞれ叩いてファイルを取得すればOK

# リモートのファイルを取得
$ git checkout --theirs conflict.mp3
# 手元のファイルを取得
$ git checkout --ours conflict.mp3

このコマンドを実行した瞬間にダウンロードが発生します。

4
4
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
4
4