Re: Git merge conflicts and encoding of logs
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Dec 23, 2008, 08:22 UTC
- Message-ID
- <7vprjjfgi7.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <87lju7h4yb.dancerj%dancer@netfort.gr.jp>
Junichi Uekawa <dancer@netfort.gr.jp> writes:
Show 12 quoted lines
> 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-jpwhich 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