Bạn có thể tiếp cận vấn đề này theo nhiều cách. Tôi có thể nghĩ về hai: git-merge-file
và cũ tốt patch
. Phương pháp git-merge-file
cung cấp một số tương tác, trong khi phương pháp patch
không cung cấp.
Giải pháp với git-merge-file
phép nói rằng bạn có một tập tin gốc config.example
mà bạn sử dụng để tạo ra một tập tin không phiên bản địa phương, config.local
. Bây giờ khi cập nhật ngược dòng config.example
, bạn có thể thực hiện theo một số bước như sau để hợp nhất bất kỳ thay đổi mới nào.
$ git fetch
$ git show master:config.example > config.example.base
$ git show origin/master:config.example > config.example.latest
$ git merge-file config.local config.example.base config.example.latest
này sẽ cập nhật config.local
với các dấu hiệu xung đột thông thường, sau đó bạn sẽ phải giải quyết với công cụ hợp nhất mà bạn yêu thích (ediff
trong Emacs là tốt đẹp, tôi chắc chắn rằng có những phương thức tương tự cho Vim). Ví dụ, ba tập tin sau đây,
config.example.base:
Original:
some config
config.example.latest:
Original:
some config
Upstream:
new upstream config
config.local:
Original:
some config
My changes:
some other config
sẽ được sáp nhập như thế này:
Original:
some config
<<<<<<< config.local
My changes:
some other config
=======
Upstream:
new upstream config
>>>>>>> config.example.latest
Bạn có thể có lẽ kịch bản này mà không cần nhiều nỗ lực. Btw, git-merge-file
có thể hoạt động trên bất kỳ 3 tệp nào, chúng không cần phải được kiểm soát phiên bản theo git
. Điều đó có nghĩa là người ta có thể sử dụng nó để hợp nhất bất kỳ ba tập tin nào!
Giải pháp với patch
:
Giả sử tên cùng một tập tin, config.local
và config.example
, sau đây nên làm việc.
$ git fetch
$ git diff master..origin/master -- config.example | sed -e 's%\(^[-+]\{3\}\) .\+%\1 config.local%g' > /tmp/mypatch
$ patch < /tmp/mypatch
vâng, tôi biết cách tìm khác biệt, nhưng bây giờ tương tác áp dụng cho 'config' là câu hỏi thực tế của tôi: -/ –
Bạn đã thử sao chép tệp cấu hình đã cập nhật của mình qua config.example, kiểm tra điều đó bằng cách sử dụng tiêu chuẩn của bạn công cụ để hợp nhất từ nguồn gốc, sau đó di chuyển nó trở lại cấu hình và đặt lại trước khi bạn cam kết thay đổi thành config.example? Nếu các tập tin không quá đồng bộ, bạn sẽ nhận được ít nhất một số trợ giúp sáp nhập chỉ là những gì đã thay đổi. – 1337joe