Cách sử dụng Visual Studio Code làm trình soạn thảo mặc định cho Git MergeTool


121

Hôm nay tôi đã cố gắng sử dụng git mergetooldấu nhắc lệnh trên Windows và nhận ra rằng mặc định sử dụng Vim , điều này thật tuyệt, nhưng tôi thích VS Code hơn .

Làm cách nào để có chức năng Visual Studio Code làm GUI để xử lý xung đột hợp nhất (hoặc thậm chí là một công cụ khác biệt) cho Git?

Câu trả lời:


240

Kể từ Visual Studio Code 1.13 Better Merge đã được tích hợp vào cốt lõi của Visual Studio Code.

Cách để kết nối chúng với nhau là sửa đổi của bạn .gitconfigvà bạn có hai lựa chọn .

  1. Để thực hiện việc này với các mục nhập dòng lệnh, hãy nhập từng mục sau: (Lưu ý: thay thế "bằng 'trên Windows Git Bash, macOS và Linux như được Iztok Delfin và e4rache làm rõ)

    1. git config --global merge.tool vscode
    2. git config --global mergetool.vscode.cmd "code --wait $MERGED"
    3. git config --global diff.tool vscode
    4. git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"
  2. Để thực hiện việc này bằng cách dán một số dòng trong .gitconfig Visual Studio Code .

    • Chạy git config --global core.editor "code --wait"từ dòng lệnh.
    • Từ đây bạn có thể nhập lệnh git config --global -e. Bạn sẽ muốn dán mã vào "Khối bổ sung" bên dưới.

      [user]
          name = EricDJohnson
          email = cool-email@neat.org
      [gui]
          recentrepo = E:/src/gitlab/App-Custom/Some-App
      # Comment: You just added this via 'git config --global core.editor "code --wait"'
      [core]
          editor = code --wait
      # Comment: Start of "Extra Block"
      # Comment: This is to unlock Visual Studio Code as your Git diff and Git merge tool
      [merge]
          tool = vscode
      [mergetool "vscode"]
          cmd = code --wait $MERGED
      [diff]
          tool = vscode
      [difftool "vscode"]
          cmd = code --wait --diff $LOCAL $REMOTE
      # Comment: End of "Extra Block"
      

Bây giờ từ trong thư mục Git của bạn có xung đột chạy git mergetoolvà, tada, bạn có Visual Studio Code giúp bạn xử lý xung đột hợp nhất! (Chỉ cần đảm bảo lưu tệp của bạn trước khi đóng Visual Studio Code.)

Chấp nhận thay đổi bất kỳ ai?

Để đọc thêm về cách khởi chạy codetừ dòng lệnh, hãy xem tài liệu này .

Để biết thêm thông tin, git mergetoolhãy xem tài liệu này .


3
Có một dòng phía trên <<<< Head, được chèn liệt kê các tùy chọn: "Chấp nhận thay đổi hiện tại | Chấp nhận thay đổi sắp tới | Chấp nhận cả hai thay đổi | So sánh thay đổi" và tôi tin rằng nó sẽ chèn dòng này vào mỗi phần của các thay đổi được phát hiện trong tệp . Nhưng trong một phần nếu bạn muốn tùy chỉnh hợp nhất một chút cái này và một chút cái kia bằng tay, tôi tin rằng bạn sẽ thực hiện thay đổi đó trong cục bộ của mình và sau đó chọn tùy chọn "Chấp nhận thay đổi hiện tại". Vì vậy, dòng chảy công việc khiến bạn phải lùi lại một bước để tiến thêm một bước. Nếu những người khác giải quyết này theo một cách khác xin vui lòng gửi vào đây để giáo dục chúng tôi
Eric D. Johnson

3
Tôi nhận được lỗi unknown tool: vscode... Tôi khá chắc chắn để gọi VsCode từ dòng lệnh bạn phải sử dụng codethay vìvscode
Kolob Canyon

19
Ngoài ra, điều này không làm việc cho tôi. Nó chỉ bật VsCode mở và không có file nào từng được đưa lên
Kolob Canyon

1
Những gì tôi muốn làm là "giff difftool mybranch master" và mở mã VS với sự khác biệt của tất cả các tệp đã thay đổi. Ngay bây giờ, nó sẽ chỉ mở một và chờ bạn đóng nó.
Pluc 17/1218

1
Ồ, tôi biết điều đó, nhưng nó không có tính linh hoạt mà tôi đang tìm kiếm như nhận được sự khác biệt giữa hai cam kết hoặc hai nhánh. Và nếu có, điều hướng git trong so với mã theo ý kiến ​​của tôi là khá kinh khủng. Tôi chỉ thích giao diện người dùng khác biệt và hợp nhất của họ. Tôi đã đi và thấy git difftool -dmột thư mục khác biệt. Tôi sẽ kiểm tra xem nó hoạt động như thế nào vào ngày mai.
Pluc 19/1218

23

Tôi đã phải thay thế các dấu ngoặc kép bằng dấu ngoặc kép đơn giản:

  git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

để nó hoạt động bình thường (với dấu ngoặc kép, $ LOCAL và $ REMOTE được thay thế bằng giá trị của chúng).

Điều này là cần thiết nếu bạn đang sử dụng Git Bash cho Windows thay vì Windows Command Prompt.


1
Không phải cho tôi. Tôi vừa thực hiện việc này trên Windows bằng Command Prompt. Có lẽ bạn đang sử dụng một cái gì đó khác nhau? Nếu vậy, tôi khuyên bạn nên thêm môi trường mà bạn đang sử dụng để những người khác có cùng môi trường sẽ biết rằng họ sẽ cần thực hiện thay đổi này.
Todesengel

1
@ e4rache và @ Iztok-Delfin những gì bạn liệt kê ở đây là nội dung hữu ích nhưng bạn đã vô tình biến nó thành câu trả lời, khi đó thực sự là một nhận xét. Tôi chắc rằng bạn đã gặp rắc rối vì bạn không có 50 điểm trên SO để cho phép bạn nhận xét, đây là một loại vấn đề về quy trình công việc của trang web có thể cần được xem xét. Dù sao, cảm ơn bạn đã đóng góp và tôi đã thêm mẹo của bạn trong câu trả lời của tôi ở trên. Cảm ơn vì đã giúp những người đến sau và đang sử dụng Git Bash:^)
Eric D. Johnson

@ eric-d-johnson Tôi hoàn toàn có ý định bình luận thay vì trả lời. (xin lỗi, tôi mới vào trang web này) và btw tôi đã sử dụng bash trên linux. Có cách nào để chuyển câu trả lời này thành một nhận xét không?
đau tai

@ e4rache Tôi không biết có cách nào để đưa nó thành một nhận xét, nhưng có lẽ người điều hành sẽ thấy điều này và cho chúng tôi một số mẹo (gợi ý, gợi ý). Nếu bạn có 50 điểm, bạn có thể đưa ra nhận xét về câu trả lời được chấp nhận và xóa câu trả lời này, vì vậy một khi bạn trở thành ngôi sao nhạc rock SO với hàng tấn điểm, bạn có thể quay lại đây và làm bất cứ điều gì khiến bạn hài lòng và mang về những kỷ niệm đẹp về cách tất cả bắt đầu.
Eric D. Johnson

1
@mohamedghonemi Phản hồi tốt. Tôi đã cập nhật phần giải thích ở trên cùng cho macOS và Linux ngay bây giờ để nhớ sử dụng ( 'các) dấu ngoặc kép .
Eric D. Johnson

2

Trong trường hợp nếu ai đó muốn giải quyết nó trong Visual Studio, một tùy chọn khác sẽ được thực hiện thông qua Visual Studio: Team Explorer -> nhấp vào biểu tượng Trang chủ => nút Cài đặt => mở rộng phần Git => nhấp vào Cài đặt chung

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


Visual Studio không tương đương với Visual Studio Code. Cách cài đặt như thế này được thực hiện khá khác nhau. Xem stackoverflow.com/a/33798601 để biết sự khác biệt
jwd630

1
@ jwd630 Tôi biết mã VS khác với VS. Tôi đã gặp sự cố này trong VS nhưng không thể tìm thấy giải pháp cho điều đó vì vậy tôi mặc dù tốt hơn là nên đăng nó trong trường hợp ai đó đang thử nghiệm sự cố này. Không cần bỏ phiếu.
Daniel B

2

Ngoài câu trả lời tuyệt vời hiện có , bạn nên mở VS Code trong một cửa sổ mới bằng cách thêm -nvào dòng lệnh.

Vì vậy, của bạn git config --global --edittrông giống như thế này.

[merge]
        tool = vscode
[mergetool "vscode"]
        cmd = code -n --wait $MERGED
[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code -n --wait --diff $LOCAL $REMOTE                                                    

1

Sử dụng sách hướng dẫn, bạn có thể tìm thấy một lập luận thú vị:

git difftool --help 
-x <command>, --extcmd=<command>
       Specify a custom command for viewing diffs.  git-difftool ignores the configured defaults and runs $command $LOCAL $REMOTE when this option is specified.
       Additionally, $BASE is set in the environment.

Với thông tin này, bạn có thể dễ dàng sử dụng lệnh sau mà không cần chạm vào cấu hình git:

git difftool -x "code --wait --diff" 

Câu hỏi tương tự ở đây

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.