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 .gitconfig
tệ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 diff
sẽ tiếp tục hoạt động như bình thường.]
Bạn sử dụng git difftool
chí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ự $LOCAL
và $REMOTE
trong 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 = false
dò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 .gitconfig
tệ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 mergetool
bạ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_name
nà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 .gitconfig
mục ví dụ ở trên, 2 dòng được đề xuất là [mergetool "meld"]
cmd
dò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 cmd
dò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 cmd
dò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 đó.
$BASE
là tổ tiên cam kết được chia sẻ của $LOCAL
và $REMOTE
, điều này có nghĩa là tập tin giống như khi nhánh chứa $REMOTE
ban đầ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 $MERGED
hoặc $BASE
ở giữa $LOCAL
và $REMOTE
.
Dù bằng cách nào, Meld sẽ hiển thị 3 tấm với $LOCAL
và $REMOTE
ở các ô bên trái và bên phải và ở $MERGED
hoặ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 $BASE
cho tổ tiên cam kết được chia sẻ của $LOCAL
và $REMOTE
. [Vì cả hai cmd
dòng có thể hữu ích, tôi giữ cả hai trong .gitconfig
tệp của mình . Hầu hết thời gian tôi sử dụng $MERGED
dòng và $BASE
dò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 $BASE
dòng thay thế.]
Lưu ý On Output File: Đừng lo lắng rằng --output "$MERGED"
được sử dụng trong cmd
bất kể $MERGED
hoặc $BASE
đã được sử dụng trước đó trong cmd
dòng. Các --output
tù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 $MERGED
hoặc $BASE
như 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 .orig
và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, .orig
tệ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 unchanged
và sau đó hỏi Was the merge successful? [y/n]
, nếu bạn trả lời n
thì 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 .orig
tệ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 mergetool
trướ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 cmd
dò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 cmd
thoá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 cmd
dò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 cmd
dò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 cmd
dò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 cmd
dò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 meldc
hoặ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 Filters
tab 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 whitespace
và Leading whitespace
, không có Trailing whitespace
bộ 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 Filters
tab 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.