mam już poGdzie jest 3-kierunkowy sterownik scalający Git dla plików .PO (gettext)?
[attr]POFILE merge=merge-po-files
locale/*.po POFILE
w .gitattributes
i chciałbym uzyskać połączenia oddziałów pracować prawidłowo, gdy ten sam plik lokalizacja (np locale/en.po
) została zmodyfikowana w oddziałach paraller. Obecnie używam następujące sterownik scalania:
#!/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
Jednak msgcat
jest zbyt głupi i nie jest to prawdą trójdrożny scalić. Na przykład, jeśli mam
wersja BASE
msgid "foo" msgstr "foo"
wersja LOCAL
msgid "foo" msgstr "bar"
wersji PILOT
msgid "foo" msgstr "foo"
Skończy się konflikt. Jednak prawdziwym trójdrożny kierowca seryjnej będzie wyjście prawidłowe scalanie:
msgid "foo"
msgstr "bar"
pamiętać, że nie można po prostu dodać --use-first
do msgcat
ponieważ PILOT może zawierać zaktualizowane tłumaczenia. Ponadto, jeśli BASE, LOCAL i REMOTE są unikalne, nadal chcę konfliktu, ponieważ byłby to konflikt.
Co muszę zmienić, aby to działało? Dodatkowe punkty za mniej szalony znacznik konfliktu niż "# - # - # - # - #", jeśli to możliwe.
jakaś szansa, można użyć innego narzędzia Merge, jak KDiff3 (który jest 3-way)? – VonC
Czy próbowałeś rozwiązać konflikt pliku .PO scalania z kdiff3? Mam i nie jest ładna. Problem z plikami .PO polega na tym, że w rzeczywistości są to binarne pliki baz danych, które akurat wyglądają jak pliki tekstowe. Każde narzędzie zaprojektowane do scalania plików tekstowych zawiedzie. –