vimdiff và hợp nhất xung đột


14

Khi hợp nhất các nhánh dưới sự kiểm soát nguồn thường có vấn đề xung đột hợp nhất với các nhà phát triển khác.

Tôi biết rằng chúng ta có thể sử dụng vimdiff để thay đổi mã khác với kiểm soát nguồn , nhưng đó cũng là một cách chúng ta có thể sử dụng vimdiff để giúp giải quyết xung đột hợp nhất.

Cá nhân tôi quan tâm nhiều hơn đến git nhưng sẽ hữu ích nếu hiểu nếu có các plugin / kỹ thuật cho các công cụ / hệ thống kiểm soát nguồn khác.


Bạn đã bao giờ cho Meld thử chưa?
Eric Sabelhaus

1
@EricSabelhaus: Có tốt hơn vimdiff trong việc giải quyết xung đột không? Trang web này là về hỏi / trả lời câu hỏi về vim.
Martin York

Nó phụ thuộc vào trường hợp sử dụng tôi cho rằng. Nếu tôi đang làm việc với mã sống từ xa, tôi chắc chắn sẽ sử dụng vimdiff. Nếu tôi đang làm việc cục bộ trên máy dev của mình, tôi sẽ sử dụng Meld, vì nó cung cấp giao diện người dùng giàu tính năng để hỗ trợ nhà phát triển thực hiện việc hợp nhất 3 cách phức tạp.
Eric Sabelhaus

1
@EricSabelhaus: Đối với tôi thuật ngữ feature rich UInày là sai lệch; vimdiff có thể không có giao diện người dùng đẹp, nó chắc chắn là tính năng phong phú. Tôi cũng tìm thấy vim một môi trường năng suất hơn nhiều mà tất cả các trình soạn thảo GUI tôi đã sử dụng (nhưng tôi đã sử dụng nó trong một thời gian dài và đó là một đường cong học tập dốc). Tôi tò mò hơn nếu Meld làm bất cứ điều gì mà vim không làm điều đó sẽ làm cho nó có giá trị trong khi thậm chí tìm kiếm.
Martin York

Tôi không thể nói cụ thể liệu nó có một bộ tính năng mạnh mẽ hơn không, nhưng nó chắc chắn nằm trong cùng một lĩnh vực với vimdiff.
Eric Sabelhaus

Câu trả lời:


18

Tôi thường sử dụng git trên dòng lệnh.

Nhưng khi có xung đột hợp nhất, tôi sử dụng Vim để giải quyết chúng (cá nhân tôi làm điều đó với plugin chạy trốn). Lưu ý: fugitive tốt cho nhiều thao tác git từ bên trong Vim. Tính năng yêu thích của tôi là khác biệt 3 cách của một cuộc xung đột hợp nhất.

git hỗ trợ điều này trong vimdiff thông qua git mergetool. Tôi đã cài đặt fugitive nhưng bạn có thể thiết lập thủ công (Cảm ơn @Jay Thompson).

Cài đặt thủ công:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

Đầu ra hơi khác với những gì được mô tả dưới đây (cá nhân tôi chưa sử dụng cái này). Nhưng nguyên tắc là như nhau nhưng bạn có một cửa sổ thứ tư ở phía dưới chứa kết quả.

nhập mô tả hình ảnh ở đây

Thiết lập với Fugitive

vim-fugitive là một plugin tích hợp / tích hợp git cho Vim; nó có thể làm nhiều việc, và giải quyết xung đột là một trong số đó.

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. Xem 2 (bên trái): Mã nằm trên nhánh của bạn.
  2. Xem 1 (giữa): Mã được hợp nhất (có xung đột)
  3. Xem 3 (phải): Mã đã được hợp nhất vào mã của bạn.

Bây giờ bạn có thể kéo và nhận văn bản từ hai chế độ xem khác vào chế độ xem trung tâm (sẽ chứa tất cả các bản sửa lỗi thủ công). Khi bạn đã giải quyết tất cả các xung đột theo cách thủ công, chỉ cần thoát vimdiff

nhập mô tả hình ảnh ở đây

Mặc dù bạn có thể sử dụng :diffget <view number>:diffput <view number>để kéo và đẩy mọi thứ giữa các chế độ xem. Cá nhân tôi thấy điều đó rất hữu ích. Tất cả các mã đã ở trong chế độ xem giữa. Vì vậy, tôi chỉ muốn chỉnh sửa chế độ xem đó bằng tay cho đến khi xung đột được giải quyết. Có thể thấy cả hai phiên bản mã ở hai bên cửa sổ trình soạn thảo của tôi mặc dù cực kỳ hữu ích.

Cũng là một bản demo rất tốt về việc sử dụng nó ở đây


1
Nếu bạn không muốn sử dụng hoặc cài đặt Fugitive vì một số lý do, bạn cũng có thể chỉ cần đặt git config --global merge.tool vimdiffvà sau đó chạy git mergetoolđể bắt đầu vim ở chế độ khác.
Jay Thompson

Điều này có hỗ trợ kiểu xung đột "diff3", trong đó "tổ tiên chung hợp nhất" được hiển thị không?
alxndr

@alxndr: Tôi chưa nghe nói về diff3 trước đây. Nhưng sau khi google nhanh. Đầu ra của một xung đột hợp nhất trong git (và kiểm soát nguồn khác mà tôi đã sử dụng) giống như a diff3 -E. Vì vậy, những hình ảnh trên được tạo ra từ các tệp có các điểm đánh dấu trong đó.
Martin York

Bây giờ tôi nhìn kỹ, ảnh chụp màn hình đầu tiên cho thấy phong cách hợp nhất diff3; khung trên cùng ở giữa "BASE" là tổ tiên chung, mà các ô bên trái và bên phải được chuyển hướng từ đó.
alxndr

1
Điều quan trọng cần nhớ là mỗi 4 chế độ xem này chỉ là một bộ đệm. Điều này có nghĩa là bạn có thể mở một tab khác (hoặc thậm chí ở cùng một cửa sổ) và chỉ chọn các bộ đệm bạn muốn xem tại bất kỳ thời điểm nào. Không có lý do để giữ cho cả 4 cửa sổ mở cùng một lúc nếu bạn không sử dụng tất cả chúng.
Thăm dò ý kiến ​​Cody
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.