Định cấu hình công cụ tìm khác với .gitconfig


159

Làm cách nào để định cấu hình Git để sử dụng một công cụ khác để phân biệt với tệp .gitconfig?

Tôi có cái này trong .gitconfig:

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

Nó không hoạt động; nó chỉ mở dòng lệnh khác thường. Khi tôi làm

export GIT_EXTERNAL_DIFF=git-chdiff

sau đó git diffsẽ mở ra công cụ khuếch tán bên ngoài (vì vậy tôi biết kịch bản công cụ tìm khác biệt bên ngoài hoạt động tốt). Tôi có vấn đề gì với cấu hình .gitconfig của tôi cho công cụ tìm khác không?


1
Xem stackoverflow.com/questions/255202/ (có thể đóng cái này thành bản sao)
Stein G. Strindhaug

Câu trả lời:


140

Git cung cấp một loạt các công cụ khác nhau được cấu hình sẵn "ngoài hộp" (kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffuse, opendiff, p4 để chỉ định của riêng bạn. Để sử dụng một trong các Difftools được cấu hình sẵn (ví dụ: "vimdiff"), bạn thêm các dòng sau vào ~/.gitconfig:

[diff]
    tool = vimdiff

Bây giờ, bạn sẽ có thể chạy "git Difftool" và sử dụng công cụ bạn chọn.

Mặt khác, việc chỉ định Difftool của bạn sẽ tốn nhiều công sức hơn một chút, xem Làm cách nào để tôi xem đầu ra 'git diff' với công cụ / trình xem khác nhau ưa thích của tôi?


Liên kết đầu tiên bị hỏng. Có vẻ như tên miền đã thay đổi từ .comsang .org. Tôi có thể duyệt jeetworks.org/software
RBT

1
Bạn có ý nghĩa gì với một Difftool "out-of-the-box" được cấu hình sẵn? Để thiết lập một công cụ tìm khác biệt bên ngoài "winMerge" không có trong danh sách của bạn, tôi phải thực hiện cài đặt giống như bạn đã đề cập trong bài đăng của mình và mọi thứ bắt đầu hoạt động mà không cần cấu hình bổ sung. Điều đó có nghĩa là git cũng hỗ trợ "winMerge" vì tôi có thể hiểu từ bài đăng của bạn rằng nó yêu cầu một số công việc / cài đặt / cấu hình bổ sung để thiết lập một công cụ khác không được hỗ trợ ngoài luồng hộp bằng git.
RBT

169

Một cách khác để làm điều đó (từ dòng lệnh):

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

Hai dòng đầu tiên sẽ đặt Difftool và mergetool thành tkdiff- thay đổi tùy theo sở thích của bạn. Dòng thứ ba vô hiệu hóa lời nhắc gây phiền nhiễu, vì vậy bất cứ khi nào bạn nhấn, git difftoolnó sẽ tự động khởi chạy Difftool.


11
Tôi đã làm git config --global diff.tool diffmergenhưng khi tôi làm git diff myfile.txtnó vẫn cho tôi mặc định unix diff
amphibient

Có lẽ bạn có một cấu hình cục bộ xác định một công cụ khác?
Omer Dagan

1
có lẽ bạn cần phải truyền các tham số chính xác để khuếch tán: liên kết này giải thích cách thực hiện cho meld: link: nathanhoad.net/how-to-meld-for-git-diffs-in-ubfox-hardy
rptr

5
@amphibient: dùng thử công cụ git diff myfile.txt để sử dụng công cụ.
JBRWilkinson

72

Những người khác đã thực hiện một câu trả lời 99% về điều này, nhưng có một bước còn lại. (Câu trả lời của tôi sẽ đến từ OS X nên bạn sẽ phải thay đổi đường dẫn tệp cho phù hợp.)

Bạn thực hiện những thay đổi này cho ~/.gitconfig:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

Điều này sẽ sửa chữa các công cụ khác. Bạn cũng có thể sửa lỗi này mà không cần chỉnh sửa ~/.gitconfigtrực tiếp bằng cách nhập các lệnh này từ thiết bị đầu cuối:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

1% mà mọi người khác không đề cập đến là khi sử dụng cái này bạn không thể chạy git diff myfile.txt; bạn cần phải chạy git difftool myfile.txt.


23
Nâng cao cho 1% cuối cùng đó. Không có gì thỏa đáng bằng một chiếc đinh đóng hoàn toàn;)
Titou

1
Có cách nào để làm cho nó trở thành công cụ mặc định?
math0ne

6
Tuyệt vời, bạn đang thiếu bước git config --global --add difftool.prompt false, mặc dù. ;)
Suma

36

Đây là một phần của ~ / .gitconfig nơi tôi định cấu hình các công cụ tìm khác biệt và hợp nhất. Tôi thích sự khác biệt của SourceGear. (Tôi rất thích nó, như một vấn đề thực tế).

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

Vì vậy, bạn thấy, bạn đang xác định một công cụ có tên là "diffmerge" trong [difftool "diffmerge"]dòng. Sau đó, tôi đang đặt công cụ "khuếch tán" làm mặc định trong [diff] tool =phần.

Tôi rõ ràng có lệnh "diffmerge" trong đường dẫn của tôi, ở đây. Nếu không, tôi cần đưa ra một đường dẫn đầy đủ để thực thi.


Không có tất cả dấu gạch chéo thoát:diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
Tim Lovell-Smith

1
Tôi sẽ làm với đơn giản hơndiffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Tim Lovell-Smith

Và nó có một tập lệnh 'sgdm_cygwin.sh' tiện dụng để làm cho phiên bản Windows dễ sử dụng từ Cygwin.
thoni56

Vì vậy, bạn chỉ có thể làm ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmergevà bạn đã sẵn sàng sử dụng cấu hình ở trên. Cũng như diffmergetrực tiếp từ dòng lệnh cygwin với các đường dẫn cygwin.
thoni56

Nó sẽ là sgdm.exengày hôm nay
kzu

22

Tái tạo câu trả lời của tôi từ chủ đề này , cụ thể hơn để đặt ngoài việc so sánh như công cụ tìm khác biệt cho Git. Tất cả các chi tiết mà tôi đã chia sẻ đều hữu ích như nhau cho bất kỳ công cụ tìm khác biệt nào, vì vậy hãy chia sẻ nó ở đây:

Lệnh đầu tiên mà chúng ta chạy như sau:

git config --global diff.tool bc3

Lệnh trên tạo mục dưới đây .gitconfigtrong %userprofile%thư mục tìm thấy :

[diff]
    tool = bc3

Sau đó, bạn chạy lệnh bên dưới ( Chạy lệnh này là dự phòng trong trường hợp cụ thể này và chỉ được yêu cầu trong một số trường hợp chuyên biệt. Bạn sẽ biết điều đó trong một thời gian ngắn ):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

Lệnh trên tạo mục dưới đây trong .gitconfigtệp:

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

Điều cần biết ở đây là chìa khóa bc3. Đây là một khóa nổi tiếng để git tương ứng với một phiên bản cụ thể của các công cụ so sánh nổi tiếng có sẵn trên thị trường ( bc3tương ứng với phiên bản thứ 3 của công cụ Beyond So sánh). Nếu bạn muốn xem tất cả các khóa được xác định trước, chỉ cần chạy git difftool --tool-helplệnh trên git bash. Nó trả về danh sách dưới đây:

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

Bạn có thể sử dụng bất kỳ phím nào ở trên hoặc xác định khóa tùy chỉnh của riêng bạn. Nếu bạn muốn thiết lập một công cụ mới hoàn toàn (hoặc một phiên bản mới được phát hành của công cụ nổi tiếng) không ánh xạ tới bất kỳ khóa nào được liệt kê ở trên thì bạn có thể ánh xạ nó tới bất kỳ khóa nào được liệt kê ở trên hoặc sang một khóa mới khóa tùy chỉnh của riêng bạn.

Điều gì nếu bạn phải thiết lập một công cụ so sánh

  • Hoàn toàn mới trên thị trường

HOẶC LÀ

  • Một phiên bản mới của một công cụ nổi tiếng hiện có đã được phát hành mà không được ánh xạ tới bất kỳ khóa được xác định trước nào trong git ?

Giống như trong trường hợp của tôi, tôi đã cài đặt ngoài so sánh 4. ngoài so sánh là một công cụ nổi tiếng để git nhưng phiên bản 4 của nó không được ánh xạ tới bất kỳ khóa nào hiện có theo mặc định. Vì vậy, bạn có thể làm theo bất kỳ phương pháp nào dưới đây:

  1. Tôi có thể ánh xạ ngoài công cụ so sánh 4 với khóa đã có sẵn bc3tương ứng với phiên bản 3 so sánh. Tôi không có so sánh phiên bản 3 trên máy tính của mình nên tôi không quan tâm. Nếu tôi muốn, tôi có thể ánh xạ nó tới bất kỳ khóa nào được xác định trước trong danh sách trên, vd examdiff.

    Nếu bạn ánh xạ phiên bản công cụ đã biết đến phù hợp với khóa đã có / đã biết thì bạn không cần phải chạy lệnh thứ hai vì đường dẫn cài đặt của chúng đã được biết đến với git .

    Ví dụ: nếu tôi đã cài đặt ngoài phiên bản so sánh 3 trên hộp của mình thì việc có cấu hình bên dưới trong .gitconfigtệp của tôi là đủ để bắt đầu:

    [diff]
    tool = bc3
    

    Nhưng nếu bạn muốn thay đổi công cụ liên kết mặc định thì cuối cùng bạn sẽ đề cập đến paththuộc tính riêng biệt để git biết đường dẫn từ nơi exe của công cụ mới của bạn phải được khởi chạy. Thay vào đó, đây là mục mà cáo git sẽ khởi chạy ngoài so với 4. Lưu ý đường dẫn của exe:

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. Cách tiếp cận rõ ràng nhất là xác định một khóa mới hoàn toàn cho công cụ so sánh mới hoặc phiên bản mới của một công cụ nổi tiếng. Giống như trong trường hợp của tôi, tôi đã xác định một khóa mới bc4để dễ nhớ. Trong trường hợp như vậy, bạn phải chạy tất cả hai lệnh nhưng lệnh thứ hai của bạn sẽ không thiết lập đường dẫn thực thi công cụ mới của bạn. Thay vào đó, bạn phải đặt cmdthuộc tính cho công cụ mới của mình như dưới đây:

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
    

    Chạy các lệnh trên tạo các mục bên dưới trong .gitconfigtệp của bạn :

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    

Tôi thực sự khuyên bạn nên làm theo cách tiếp cận # 2 để tránh bất kỳ sự nhầm lẫn nào cho bản thân trong tương lai.


16

Thêm một trong các khối bên dưới hoạt động để tôi sử dụng KDiff3 cho môi trường phát triển Windows và Linux của mình. Nó làm cho một công cụ khác biệt và hợp nhất đa nền tảng nhất quán.

Linux

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

các cửa sổ

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

Bạn đã tìm thấy một cách để tạo một tệp .gitconfig đa nền tảng duy nhất chỉ định đúng đường dẫn có điều kiện cho cả linux và windows chưa?
Jerry Asher

1
Thành thật mà nói, tôi đã chuyển sang sử dụng ở khắp mọi nơi và nó dường như hoạt động.
psychboom

Có lý do để đặt trustExitCode = false không? Theo hiểu biết của tôi nếu sai được đặt, git sẽ bỏ qua mã thoát không bằng 0 từ công cụ của bạn. Vì vậy, nếu công cụ của bạn, git sẽ nhầm tưởng việc hợp nhất là thành công. Nhưng có thể có một lý do để đặt nó sai, xin vui lòng giải thích.
apol

Tôi tin rằng trustExitCode = falsesẽ khiến git hỏi bạn rằng việc hợp nhất có thành công hay không, thay vì dựa vào việc liệu công cụ này có thoát ra với trạng thái đúng hay sai hay không.
psychboom

4

Nếu bạn muốn có một tùy chọn để sử dụng nhiều công cụ tìm khác biệt, hãy thêm bí danh vào .gitconfig

[alias]
    kdiff = difftool --tool kdiff3

lên để đề cập đến --tooltùy chọn. Cảm ơn
itMaxence 7/2/19

0

Tham khảo Microsoft vscode-tips-and-trick . Chỉ cần chạy các lệnh này trong thiết bị đầu cuối của bạn:

git config --global merge.tool code

Nhưng trước tiên, bạn cần thêm codelệnh vào PATH của bạn. nhập mô tả hình ảnh ở đây


0

Trong Windows, chúng ta cần chạy $git difftool --tool-helplệnh để xem các tùy chọn khác nhau như:

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

và chúng ta có thể thêm bất kỳ trong số họ (ví dụ như winmerge) như

$  git difftool --tool=winmerge

Để định cấu hình notepad ++ để xem tệp trước khi cam kết:

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

và sử dụng $ git commitsẽ mở thông tin cam kết trong notepad ++

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.