Làm cách nào để thiết lập và sử dụng Meld làm git Difftool của tôi?
git Difftool hiển thị diff bằng chương trình tìm khác biệt GUI (tức là Meld) thay vì hiển thị đầu ra diff trong terminal của bạn.
Mặc dù bạn có thể đặt chương trình GUI trên dòng lệnh bằng cách sử dụng -t <tool> / --tool=<tool>nó có ý nghĩa hơn để định cấu hình nó trong .gitconfigtệp của bạn . [Lưu ý: Xem các phần về thoát dấu ngoặc kép và đường dẫn Windows ở phía dưới.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Lưu ý: Những cài đặt này sẽ không thay đổi hành vi git diffsẽ tiếp tục hoạt động như bình thường.]
Bạn sử dụng git difftoolchính xác như cách bạn sử dụng git diff. ví dụ
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Nếu được cấu hình đúng, cửa sổ Meld sẽ mở hiển thị diff bằng giao diện GUI.
Thứ tự của các ô cửa sổ GUI Meld có thể được điều khiển theo thứ tự $LOCALvà $REMOTEtrong cmd, nghĩa là tệp nào được hiển thị trong khung bên trái và trong khung bên phải. Nếu bạn muốn chúng theo cách khác, chỉ cần trao đổi chúng xung quanh như thế này:
cmd = meld "$REMOTE" "$LOCAL"
Cuối cùng, prompt = falsedòng chỉ đơn giản ngăn git nhắc bạn về việc bạn có muốn khởi chạy Meld hay không, theo mặc định, git sẽ đưa ra lời nhắc.
Làm cách nào để thiết lập và sử dụng Meld làm hợp nhất git của tôi?
git mergetool cho phép bạn sử dụng chương trình hợp nhất GUI (tức là Meld) để giải quyết các xung đột hợp nhất đã xảy ra trong quá trình hợp nhất.
Giống như Difftool, bạn có thể đặt chương trình GUI trên dòng lệnh bằng cách sử dụng -t <tool> / --tool=<tool>, nhưng như trước đây, việc cấu hình nó trong .gitconfigtệp của bạn có ý nghĩa hơn . [Lưu ý: Xem các phần về thoát dấu ngoặc kép và đường dẫn Windows ở phía dưới.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
Bạn KHÔNG sử dụng git mergetoolđể thực hiện hợp nhất thực tế. Trước khi sử dụng, git mergetoolbạn thực hiện hợp nhất theo cách thông thường với git. ví dụ
git checkout master
git merge branch_name
Nếu có xung đột hợp nhất, git sẽ hiển thị một cái gì đó như thế này:
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
Tại thời điểm file_namenày sẽ chứa tệp được hợp nhất một phần với thông tin xung đột hợp nhất (đó là tệp có tất cả các mục >>>>>>>và <<<<<<<mục trong đó).
Mergetool hiện có thể được sử dụng để giải quyết xung đột hợp nhất. Bạn bắt đầu nó rất dễ dàng với:
git mergetool
Nếu được cấu hình đúng, cửa sổ Meld sẽ mở hiển thị 3 tệp. Mỗi tệp sẽ được chứa trong một khung riêng biệt của giao diện GUI.
Trong .gitconfigmục ví dụ ở trên, 2 dòng được đề xuất là [mergetool "meld"] cmddòng. Trong thực tế, có tất cả các cách để người dùng nâng cao định cấu hình cmddòng, nhưng điều đó nằm ngoài phạm vi của câu trả lời này.
Câu trả lời này có 2 cmddòng thay thế , giữa chúng, sẽ phục vụ cho hầu hết người dùng và sẽ là điểm khởi đầu tốt cho người dùng nâng cao muốn đưa công cụ lên mức độ phức tạp tiếp theo.
Đầu tiên ở đây là ý nghĩa của các tham số:
$LOCAL là tập tin trong nhánh hiện tại (ví dụ: master).
$REMOTE là tệp trong nhánh được hợp nhất (ví dụ Branch_name).
$MERGED là tệp được hợp nhất một phần với thông tin xung đột hợp nhất trong đó.
$BASElà tổ tiên cam kết được chia sẻ của $LOCALvà $REMOTE, điều này có nghĩa là tập tin giống như khi nhánh chứa $REMOTEban đầu được tạo.
Tôi đề nghị bạn sử dụng một trong hai:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
hoặc là:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
Sự lựa chọn là sử dụng $MERGEDhoặc $BASEở giữa $LOCALvà $REMOTE.
Dù bằng cách nào, Meld sẽ hiển thị 3 tấm với $LOCALvà $REMOTEở các ô bên trái và bên phải và ở $MERGEDhoặc $BASEở giữa.
Trong trường hợp CẢ HAI, ngăn giữa là tệp mà bạn nên chỉnh sửa để giải quyết xung đột hợp nhất. Sự khác biệt chỉ là ở chỗ bắt đầu chỉnh sửa vị trí bạn muốn; $MERGEDđối với tệp chứa tệp được hợp nhất một phần với thông tin xung đột hợp nhất hoặc $BASEcho tổ tiên cam kết được chia sẻ của $LOCALvà $REMOTE. [Vì cả hai cmddòng có thể hữu ích, tôi giữ cả hai trong .gitconfigtệp của mình . Hầu hết thời gian tôi sử dụng $MERGEDdòng và $BASEdòng được nhận xét, nhưng nhận xét có thể được hoán đổi nếu tôi muốn sử dụng $BASEdòng thay thế.]
Lưu ý On Output File: Đừng lo lắng rằng --output "$MERGED"được sử dụng trong cmdbất kể $MERGEDhoặc $BASEđã được sử dụng trước đó trong cmddòng. Các --outputtùy chọn chỉ đơn giản nói với Meld gì git filename muốn các tập tin giải quyết xung đột được lưu trong. Meld sẽ tiết kiệm được chỉnh sửa xung đột của bạn trong tập tin đó cho dù bạn sử dụng $MERGEDhoặc $BASEnhư bắt đầu chỉnh sửa quan điểm của bạn.
Sau khi chỉnh sửa khung giữa để giải quyết xung đột hợp nhất, chỉ cần lưu tệp và đóng cửa sổ Meld. Git sẽ tự động cập nhật và tệp trong nhánh hiện tại (ví dụ: master) sẽ chứa bất cứ thứ gì bạn đã kết thúc ở khung giữa.
git sẽ tạo một bản sao lưu của tệp được hợp nhất một phần với thông tin xung đột hợp nhất trong đó bằng cách thêm .origvào tên tệp gốc. ví dụ file_name.orig. Sau khi kiểm tra xem bạn có hài lòng với việc hợp nhất và chạy bất kỳ thử nghiệm nào bạn muốn làm không, .origtệp có thể bị xóa.
Tại thời điểm này, bây giờ bạn có thể thực hiện một cam kết để cam kết thay đổi.
Nếu, trong khi bạn đang chỉnh sửa xung đột hợp nhất trong Meld, bạn muốn từ bỏ việc sử dụng Meld, sau đó thoát Meld mà không lưu tệp giải quyết hợp nhất trong khung giữa. git sẽ trả lời với thông báo file_name seems unchangedvà sau đó hỏi Was the merge successful? [y/n], nếu bạn trả lời nthì giải quyết xung đột hợp nhất sẽ bị hủy bỏ và tệp sẽ không thay đổi. Lưu ý rằng nếu bạn đã lưu tệp trong Meld tại bất kỳ thời điểm nào thì bạn sẽ không nhận được cảnh báo và lời nhắc từ git. [Tất nhiên bạn chỉ có thể xóa tệp và thay thế nó bằng .origtệp sao lưu git tạo cho bạn.]
Nếu bạn có nhiều hơn 1 tệp có xung đột hợp nhất thì git sẽ mở một cửa sổ Meld mới cho từng tệp, từng cái một cho đến khi hoàn tất. Tất cả chúng sẽ không được mở cùng một lúc, nhưng khi bạn hoàn thành chỉnh sửa các xung đột trong một và đóng Meld, git sau đó sẽ mở cái tiếp theo, và cứ thế cho đến khi tất cả các xung đột hợp nhất đã được giải quyết.
Sẽ là hợp lý khi tạo một dự án giả để kiểm tra việc sử dụng git mergetooltrước khi sử dụng nó trong một dự án trực tiếp . Hãy chắc chắn sử dụng tên tệp chứa khoảng trắng trong thử nghiệm của bạn, trong trường hợp HĐH của bạn yêu cầu bạn thoát dấu ngoặc kép trong cmddòng, xem bên dưới.
Thoát khỏi nhân vật trích dẫn
Một số hệ điều hành có thể cần phải có dấu ngoặc kép trong cmdthoát. Người dùng ít kinh nghiệm nên nhớ rằng các dòng lệnh cấu hình nên được kiểm tra với tên tệp bao gồm khoảng trắng và nếu các cmddòng không hoạt động với tên tệp bao gồm khoảng trắng thì hãy thử thoát dấu ngoặc kép. ví dụ
cmd = meld \"$LOCAL\" \"$REMOTE\"
Trong một số trường hợp, trích dẫn phức tạp hơn có thể cần thiết. Liên kết đường dẫn thứ 1 của Windows bên dưới chứa một ví dụ về thoát ba lần mỗi trích dẫn. Đó là một nhàm chán nhưng đôi khi cần thiết. ví dụ
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Đường dẫn Windows
Người dùng Windows có thể sẽ cần thêm cấu hình được thêm vào cmddòng Meld . Họ có thể cần sử dụng đường dẫn đầy đủ đến meldc, được thiết kế để được gọi trên Windows từ dòng lệnh hoặc họ có thể cần hoặc muốn sử dụng trình bao bọc. Họ nên đọc các trang StackOverflow được liên kết bên dưới, về cách thiết lập cmddòng Meld chính xác cho Windows. Vì tôi là người dùng Linux, tôi không thể kiểm tra các cmddòng Windows khác nhau và không có thêm thông tin nào về chủ đề này ngoài việc khuyến nghị sử dụng các ví dụ của tôi với việc thêm đường dẫn đầy đủ đến Meld meldchoặc thêm thư mục chương trình Meld vào path.
Bỏ qua khoảng trắng theo sau với Meld
Meld có một số tùy chọn có thể được cấu hình trong GUI.
Trong Text Filterstab tùy chọn, có một số bộ lọc hữu ích để bỏ qua những thứ như nhận xét khi thực hiện tìm khác biệt. Mặc dù có các bộ lọc để bỏ qua All whitespacevà Leading whitespace, không có Trailing whitespacebộ lọc bỏ qua (điều này đã được đề xuất như là một bổ sung trong danh sách gửi thư Meld nhưng không có sẵn trong phiên bản của tôi).
Bỏ qua khoảng trắng theo dõi thường rất hữu ích, đặc biệt là khi cộng tác và có thể được thêm thủ công dễ dàng bằng một biểu thức chính quy đơn giản trong Text Filterstab tùy chọn Meld .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Tôi hy vọng điều này sẽ giúp tất cả mọi người.