Zaten .gitattributes
içinde.PO (gettext) dosyaları için 3 yollu Git birleştirme sürücüsü nerede?
[attr]POFILE merge=merge-po-files
locale/*.po POFILE
aşağıdaki var ve aynı yerelleştirme dosyası (örneğin locale/en.po
) ile paralel branşlarda modifiye edildiğinde düzgün çalışabilmesi için şube birleştirme almak istiyorum. Şu anda aşağıdaki birleştirme sürücüsünü kullanıyorum:
#!/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
Ancak
msgcat
çok aptal ve
bu gerçek bir üç yollu birleştirme değil. Örneğin , ben
TABAN versiyonu
msgid "foo" msgstr "foo"
YEREL sürüm
msgid "foo" msgstr "bar"
UZAKTAN sürüm
msgid "foo" msgstr "foo"
Bir çakışma ile sonuçlanacağım. Ancak , gerçek üç yollu birleştirme sürücü olur çıktısı doğru birleştirme: UZAKTAN güncellenmiş çevirisini içerebilir çünkü sadece msgcat
için --use-first
ekleyemezsiniz
msgid "foo"
msgstr "bar"
Not. Ek olarak, eğer BASE, LOCAL ve REMOTE hepsi benzersiz ise, hala bir çatışma istiyorum, çünkü bu gerçekten bir çatışma olacaktır.
Bu işi yapmak için neyi değiştirmem gerekiyor? Mümkünse '# - # - # - # - #' daha az çakışma belirteci için bonus puanları.
şansı var mı? – VonC
Kdiff3 ile çakışan .PO dosyasını birleştirmeyi denediniz mi? Bende ve güzel değil. .PO dosyaları ile ilgili sorun, gerçekte, metin dosyaları gibi görünen ikili veritabanı dosyalarıdır. Metin dosyalarını birleştirmek için tasarlanmış herhangi bir araç başarısız olur. –