Open4
gitのbareリポジトリ上で直接merge処理ができるのか問題
なんかできない理由は無い気がしてきた。
GIT_INDEX_FILE
だけだとダメ
$ GIT_INDEX_FILE=work git read-tree two
$ GIT_INDEX_FILE=work git merge three
fatal: this operation must be run in a work tree
work treeが無いとダメなら適当に指定すれば良いんだろうか。
--work-tree
で空ディレクトリを渡す → ダメ
$ mkdir empty
$ GIT_INDEX_FILE=work git --work-tree=./empty merge three
error: Your local changes to the following files would be overwritten by merge:
A
Merge with strategy ort failed.
ファイルが無いと変更扱いになるからか。。
git merge-tree
そもそも index を生成しなくても git merge-tree
でマージ処理自体はできる。
$ git merge-tree two three
e7f926c94f31384807a0d31904c5e989faf83d61
100644 d474e1b4d626dbf09a9776c778e9f8691bc8b406 1 A
100644 9a7456b54df272ef6e98ab7ba0784c8970b04808 2 A
100644 8148ef7a0a32bea2296cd93f08c96f369a2aa3f3 3 A
Auto-merging A
CONFLICT (content): Merge conflict in A
当然ストラテジを渡せば無理矢理マージできる。
$ git merge-tree -X ours two three
aed29f65d92dd6a90c81adfe3091f20bda4f1f4c
$ git commit-tree -p two -m "Merged" aed29f65d92dd6a90c81adfe3091f20bda4f1f4c
7bb3b4325135fa902d64b69859d461642830ca12
$ git log 7bb3b4325135fa902d64b69859d461642830ca12
commit 7bb3b4325135fa902d64b69859d461642830ca12
Author: okuoku <mjt@cltn.org>
Date: Thu Feb 1 20:37:39 2024 +0900
Merged
commit ebddae13456486cf16020a1f27414daea791e87d (HEAD -> master, two)
Author: okuoku <mjt@cltn.org>
Date: Thu Feb 1 20:20:44 2024 +0900
2
commit e778a8bec4190632b9c0d20fc67b1a4d48b2395e
Author: okuoku <mjt@cltn.org>
Date: Thu Feb 1 20:20:24 2024 +0900
init
ただし出力はtreeなので commit-tree
でコミットを作る必要がある。入力はブランチ。