Ho già seguitoDov'è il driver di fusione Git a 3 vie per i file .PO (gettext)?
[attr]POFILE merge=merge-po-files
locale/*.po POFILE
nel .gitattributes
e mi piacerebbe ottenere la fusione delle filiali per funzionare correttamente quando lo stesso file di localizzazione (ad esempio locale/en.po
) è stato modificato nelle filiali paraller. Attualmente sto usando seguente driver unione:
#!/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
Tuttavia, il msgcat
è troppo stupido e questo non è un vero e proprio a tre vie fondersi. Per esempio, se ho
versione base
msgid "foo" msgstr "foo"
versione locale
msgid "foo" msgstr "bar"
versione REMOTE
msgid "foo" msgstr "foo"
Finirò con un conflitto. Tuttavia, un vero e proprio driver di fusione a tre vie sarebbe uscita corretta fusione:
msgid "foo"
msgstr "bar"
Nota che non posso aggiungere semplicemente --use-first
-msgcat
perché il telecomando potrebbe contenere la traduzione aggiornata. Inoltre, se BASE, LOCAL e REMOTE sono tutti unici, voglio ancora un conflitto, perché sarebbe davvero un conflitto.
Cosa devo cambiare per farlo funzionare? Punti bonus per segnalini conflitto meno folle di "# - # - # - # - #", se possibile.
Qualsiasi possibilità che tu possa utilizzare un altro strumento di unione, come kdiff3 (che è a 3 vie)? – VonC
Hai provato a correggere l'unione file .PO in conflitto con kdiff3? Ho e non è carino. Il problema con i file .PO è che in realtà si tratta di file di database binari che sembrano file di testo. Qualsiasi strumento progettato per unire file di testo fallirà. –