Tôi đã có sauTrình điều khiển hợp nhất Git 3 chiều cho tệp .PO (gettext) ở đâu?
[attr]POFILE merge=merge-po-files
locale/*.po POFILE
trong .gitattributes
và tôi muốn để có được sáp nhập chi nhánh để hoạt động chính xác khi các tập tin định vị tương tự (ví dụ locale/en.po
) đã được sửa đổi tại các chi nhánh paraller. Tôi hiện đang sử dụng trình điều khiển kết hợp sau đây:
#!/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
Tuy nhiên, msgcat
là quá ngu ngốc và đây không phải là ba cách đúng merge. Ví dụ, nếu tôi có
phiên bản CƠ SỞ
msgid "foo" msgstr "foo"
phiên bản ĐỊA PHƯƠNG
msgid "foo" msgstr "bar"
REMOTE phiên bản
msgid "foo" msgstr "foo"
Tôi sẽ kết thúc với một cuộc xung đột. Tuy nhiên, một ba cách điều khiển kết hợp đúng sẽ ra đúng merge:
msgid "foo"
msgstr "bar"
Lưu ý rằng tôi không thể chỉ cần thêm --use-first
-msgcat
vì REMOTE thể chứa bản dịch được cập nhật. Ngoài ra, nếu BASE, LOCAL và REMOTE là tất cả duy nhất, tôi vẫn muốn có xung đột, bởi vì điều đó thực sự sẽ là một xung đột.
Tôi cần thay đổi gì để thực hiện công việc này? Điểm thưởng cho điểm đánh dấu xung đột kém hơn '# - # - # - # - #', nếu có thể.
Bất kỳ cơ hội bạn có thể sử dụng một công cụ hợp nhất, như KDiff3 (đó là 3 chiều)? – VonC
Bạn đã cố gắng sửa chữa tệp .PO xung đột với kdiff3 chưa? Tôi có và nó không đẹp. Vấn đề với các tệp .PO là trong thực tế đó là các tệp cơ sở dữ liệu nhị phân chỉ xảy ra giống như các tệp văn bản. Bất kỳ công cụ nào được thiết kế để hợp nhất các tệp văn bản sẽ bị lỗi. –