我已经有以下.PO(gettext)文件的3路Git合并驱动程序在哪里?
[attr]POFILE merge=merge-po-files
locale/*.po POFILE
在
.gitattributes
,我想获得的分支合并时相同的本地化文件(例如locale/en.po
)已在并联机器人分支被修改,以正常工作。我目前使用以下合并司机:
#!/bin/bash
# git merge driver for .PO files (gettext localizations)
# Install:
# git config merge.merge-po-files.driver "./bin/merge-po-files %A %O %B"
LOCAL="${1}._LOCAL_"
BASE="${2}._BASE_"
REMOTE="${3}._REMOTE_"
# rename to bit more meaningful filenames to get better conflict results
cp "${1}" "$LOCAL"
cp "${2}" "$BASE"
cp "${3}" "$REMOTE"
# merge files and overwrite local file with the result
msgcat "$LOCAL" "$BASE" "$REMOTE" -o "${1}" || exit 1
# cleanup
rm -f "$LOCAL" "$BASE" "$REMOTE"
# check if merge has conflicts
fgrep -q '#-#-#-#-#' "${1}" && exit 1
# if we get here, merge is successful
exit 0
然而,msgcat
是太愚蠢和这不是一个真正的三路合并。 举例来说,如果我有
基础版本
msgid "foo" msgstr "foo"
本地版本
msgid "foo" msgstr "bar"
远程版本
msgid "foo" msgstr "foo"
我最终会遇到冲突。 然而,一个真正的三路合并驱动器将输出正确的合并:
msgid "foo"
msgstr "bar"
请注意,我不能简单地添加到--use-first
msgcat
因为远程可能包含更新的翻译。另外,如果BASE,LOCAL和REMOTE都是独一无二的,我仍然需要冲突,因为那实际上是冲突。
我需要改变以做出这项工作?如果可能的话,比'# - # - # - # - #'更少的疯狂冲突标记的奖励分数。
你可以使用另一种合并工具,像kdiff3(这是3路)任何机会呢? – VonC 2013-04-29 05:18:56
您是否尝试修复冲突的.PO文件与kdiff3合并?我有,它不漂亮。 .PO文件的问题在于,实际上那些二进制数据库文件恰好看起来像文本文件。任何旨在合并文本文件的工具都将失败。 – 2013-04-29 05:21:31