Junichi Uekawa <dancer@xxxxxxxxxxxxx> writes: > Git merge conflict will insert '<<< first line of commit log message' > '===' '>>>' markers to the text file that is causing a conflict. > > Unfortunately, the encoding of the text file may be different from the > log message encoding, and that results in a file which has a mixed > encoding (which is pretty hard to edit from any editor BTW). > > My use case is editing platex files (iso-2022-jp encoded) with log > messages of utf-8. > > ... Thinking about it, it's probably the same encoding problem as git > blame. What 69cd8f6 (builtin-blame: Reencode commit messages according to git-log rules., 2008-10-22) does to git-blame is to re-encode the data taken from the commit log to i18n.logoutputencoding, and put that in the datastream. If your commit object have names and messages in utf-8, and if you set i18n.logoutputencoding to iso-2022-jp, that would reencode data taken from the commit object in iso-2022-jp and sprinkle them in the blame datastream. The issue would be certainly similar, *if* anything on your <<</===/>>> lines came from commit log message, but I couldn't trigger what you describe. I prepared a history of this shape: B / o---A with ISO-2022-JP payload and UTF-8 commit log message. Then, I added: [i18n] logoutputencoding = iso-2022-jp which lets me read "git log -p --all" quite comfortably. Everything comes out as good old JISX0208. So far, so good. Then while on branch B, I tried to merge A, which resulted in conflicts that looked like this: <<<<<<< HEAD:foo これはサイドブランチの変更です。 やはり JIS コードで書いてます。 ======= 日本語のファイルです。 JIS コードで書いてます。 >>>>>>> master:foo The above will probably come out as UTF-8 in this mail text, but the point is that the confict side markers do not have anything but filename and the branch name. I am still scratching my head trying to see where in the merge-recursive codepath you got snippet of log message. A bundle from my test repository is attached. You can use it to reproduce the repository like this: $ cd /var/tmp && mkdir test && cd test && git init $ git pull ../x.bndl master $ git fetch ../x.bndl side:side
Attachment:
x.bndl
Description: a bundle of the sample history