2011-12-13 15 views
18

Tôi từng làm việc với 3 cách kết hợp các công cụ như BC3, SourceGear, hoặc P4 mà thường hiển thị 4 thành phần: cơ sở, trái, đúngsáp nhập kết quả.Git 4 chiều nhập

Git dường như để làm, và đúng như vậy đặc biệt là trong trường hợp của một git rebase --onto dường như là một 4 chiều kết hợp: trái-base, trái, phải căn cứ, đúng, kết quả được hợp nhất. Hay nói cách khác, lấy miếng vá khác được thực hiện ở phía bên trái (địa phương), và cố gắng kết hợp nó với một miếng vá khác được thực hiện ở phía bên phải (từ xa).

Merged = Left-Diff-Path + Right-Diff-Path

Bạn có biết bất kỳ công cụ tốt cho thấy những 4 thành phần nếu có bất kỳ hỗ trợ như vậy ngày nay?

Trả lời

2

Tôi không nghĩ rằng nó tồn tại. Tôi đã luôn luôn nghe nói rằng BC3 và P4Merge là những người tốt nhất.

+0

Bạn có thể cung cấp bất kỳ làm rõ về cách P4Merge ví dụ có thể được sử dụng để hợp nhất 4 phiên bản tệp như được mô tả trong câu hỏi, nếu có thể? Tôi thấy mình muốn kết hợp các thay đổi trong một chi nhánh vào một chi nhánh khác đã trải qua những thay đổi của riêng nó kể từ khi nó phân nhánh từ lần đầu tiên. Tôi biết Team Foundation Server có thể làm điều này tự động (đối với hầu hết các bên) nếu bạn kiểm tra mã, nhưng tôi muốn làm điều này trước khi tôi kiểm tra bất cứ điều gì trong đôi khi. – BlueMonkMN

+0

Đó không phải là những gì được hỏi. Nếu bạn muốn 4 biến thể sáp nhập, bạn có thể hợp nhất với bạch tuộc 'git merge branch1 branch2 branch3 branch4'. Nếu bạn nhận được xung đột, hợp nhất bạch tuộc sẽ bị hủy, bạn không thể giải quyết nhiều hơn 2 phiên bản xung đột. Điều đó nói rằng, bạn có thể hợp nhất mỗi người trong số họ 1 tại một thời điểm. sau đó đè bẹp tất cả các hợp nhất vào đầu tiên. Bạn bảo tồn những gì sẽ là cha mẹ đã hợp nhất bạch tuộc làm việc bằng cách viết tất cả các SHA1s của những lời khuyên của các chi nhánh bạn đang hợp nhất trên các dòng riêng biệt vào '.git/MERGE_HEAD'. Bây giờ khi bạn cam kết, cam kết bạn tạo ra sẽ có 4 cha mẹ bạn muốn. –

+0

Sau khi nghiên cứu sâu hơn, tôi đã học được rằng sự hiểu biết về hợp nhất 3 chiều của tôi phải bị lẫn lộn, và tất cả những gì tôi thực sự cần là một sự kết hợp 3 cách đơn giản trong trường hợp của tôi. Xin lỗi vì sự nhầm lẫn. Tôi nghĩ khi tôi có hai chi nhánh, một phiên bản gốc chung, và một phiên bản sửa đổi của một nhánh mà tôi muốn hợp nhất vào một nhánh khác, tôi cần nhiều hơn một cách hợp nhất 3 chiều, nhưng tôi thì không. Tôi chỉ đơn giản là có thể bỏ qua các phiên bản gốc phổ biến rõ ràng và những thứ làm việc tuyệt vời trong trường hợp của tôi. – BlueMonkMN

2

diffuse dường như được cài đặt theo mặc định trên máy trạm Fedora17 của tôi; nó cũng xảy ra là mặc định theo một cách nào đó vì tôi không chỉ định bất cứ điều gì trên .gitconfig của tôi, vẫn còn:

git mergetool 

vừa mở nó, ngay lập tức hiển thị các tệp chính xác để chỉnh sửa.

Meld dường như cũng có thể xử lý nó, tôi phải cài đặt và trông đẹp hơn.

+1

Không chắc tại sao câu trả lời của tôi bị bỏ phiếu. Diffuse hiện đúng cách hợp nhất 4 cách. Thêm Meld. – Sanne

+2

Bất kỳ cơ hội nào của ảnh chụp màn hình cho thấy sự khác biệt/hợp nhất 4 chiều? Tôi chỉ thấy diffuse/meld làm hai chiều. –

+1

Ok, có vẻ như 'diffuse' * sẽ * làm một cách khác biệt tùy ý, nhưng chỉ trên các tệp đơn lẻ. –

Các vấn đề liên quan