は、私はすでに.gitattributes
で.PO(gettext)ファイル用の3-way Gitマージドライバはどこにありますか?
[attr]POFILE merge=merge-po-files
locale/*.po POFILE
を以下持っていると私は同じローカライズファイル(例えばlocale/en.po
)はparallerブランチに変更されたときに正しく動作するように枝のマージを取得したいのですが。しかし、msgcat
はこれが本当の三方をマージしないで、あまりにもダムとある
#!/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
:私は現在、ドライバーをマージ、次を使用しています。 たとえば、私は
を持っている場合はBASEバージョン
msgid "foo" msgstr "foo"
LOCALバージョン
msgid "foo" msgstr "bar"
REMOTEバージョン
msgid "foo" msgstr "foo"
私は紛争に終わるでしょう。 REMOTEが更新され、翻訳が含まれている可能性があるため、私は単にmsgcat
に--use-first
を追加することはできません
msgid "foo"
msgstr "bar"
注: しかし、真3つの方法は、ドライバの希望出力正しいマージをマージします。さらに、BASE、LOCAL、REMOTEがすべて一意であれば、私はまだ競合が欲しいです。
これを行うには何を変更する必要がありますか?可能であれば、「# - # - # - # - #」よりも狂気の少ない矛盾マーカーのボーナスポイント。
あなたは(3ウェイである)KDiff3のと同様に、別のマージツールを使用することができます任意のチャンス? – VonC
競合する.POファイルのマージをkdiff3に修正しようとしましたか?私は持っているし、それはかなりではありません。 .POファイルの問題は、実際にはテキストファイルのように見えるバイナリデータベースファイルであるということです。テキストファイルをマージするよう設計されたツールは失敗するでしょう。 –