วิธีใช้ Visual Studio Code เป็นตัวแก้ไขเริ่มต้นสำหรับ Git MergeTool


122

วันนี้ผมได้พยายามที่จะใช้git mergetoolในคำสั่งของ Windows รวดเร็วและรู้ว่ามันได้รับการผิดนัดที่จะใช้เป็นกลุ่มซึ่งเป็นเย็น แต่ฉันต้องการรหัส VS

ฉันจะมีฟังก์ชันVisual Studio Codeเป็น GUI สำหรับจัดการความขัดแย้งในการผสาน (หรือแม้กระทั่งเป็นเครื่องมือที่แตกต่างกัน) สำหรับ Git ได้อย่างไร

คำตอบ:


240

ตั้งแต่Visual Studio Code 1.13 Better Mergeถูกรวมเข้ากับแกนหลักของ Visual Studio Code

วิธีที่จะสายด้วยกันคือการปรับเปลี่ยนของคุณ.gitconfigและคุณมีสองตัวเลือก

  1. ในการดำเนินการกับรายการบรรทัดคำสั่งให้ป้อนแต่ละรายการต่อไปนี้: (หมายเหตุ: แทนที่"ด้วย'บน Windows Git Bash, macOS และ Linux ตามที่ Iztok Delfin และ e4rache ชี้แจง)

    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. การทำเช่นนี้โดยการวางสายบางอย่างใน.gitconfig กับ Visual Studio รหัส

    • เรียกใช้git config --global core.editor "code --wait"จากบรรทัดคำสั่ง
    • git config --global -eจากที่นี่คุณสามารถป้อนคำสั่ง คุณจะต้องวางโค้ดใน "Extra Block" ด้านล่าง

      [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"
      

ตอนนี้จากภายในไดเรกทอรี Git ของคุณที่มีการเรียกใช้ความขัดแย้งgit mergetoolและธาดาคุณมี Visual Studio Code ที่ช่วยคุณจัดการกับความขัดแย้งในการผสาน! (อย่าลืมบันทึกไฟล์ของคุณก่อนปิด Visual Studio Code)

ยอมรับ Incoming เปลี่ยนใคร?

สำหรับการอ่านเพิ่มเติมเกี่ยวกับการเปิดใช้งานcodeจากบรรทัดคำสั่งโปรดดูในเอกสารนี้

สำหรับข้อมูลเพิ่มเติมgit mergetoolโปรดดูเอกสารนี้


3
มีบรรทัดด้านบน <<<< ส่วนหัวที่แทรกซึ่งแสดงตัวเลือก: "ยอมรับการเปลี่ยนแปลงปัจจุบัน | ยอมรับการเปลี่ยนแปลงที่เข้ามา | ยอมรับการเปลี่ยนแปลงทั้งสอง | เปรียบเทียบการเปลี่ยนแปลง" และฉันเชื่อว่ามันแทรกสิ่งนี้ในแต่ละส่วนของการเปลี่ยนแปลงที่ตรวจพบในไฟล์ . แต่ในส่วนถ้าคุณต้องการผสานส่วนนี้และอีกเล็กน้อยด้วยมือฉันเชื่อว่าคุณจะทำการเปลี่ยนแปลงนั้นในท้องถิ่นของคุณจากนั้นไปที่ตัวเลือก "ยอมรับการเปลี่ยนแปลงปัจจุบัน" ดังนั้นขั้นตอนการทำงานจึงทำให้คุณต้องถอยหลังเพื่อที่จะก้าวไปข้างหน้า หากผู้อื่นแก้ไขปัญหานี้ด้วยวิธีอื่นโปรดโพสต์ที่นี่เพื่อให้ความรู้เรา
Eric

3
ฉันได้รับข้อผิดพลาดunknown tool: vscode... ฉันค่อนข้างแน่ใจว่าจะเรียก VsCode จากบรรทัดคำสั่งที่คุณต้องใช้codeแทนvscode
Kolob Canyon

19
นอกจากนี้ยังไม่ได้ผลสำหรับฉัน มันเพิ่งเปิด VsCode ที่เปิดอยู่และไม่มีไฟล์ใด ๆ ขึ้นมาเลย
Kolob Canyon

1
สิ่งที่ฉันต้องการจะทำคือ "giff difftool mybranch master" และเปิดรหัส VS พร้อมกับความแตกต่างของไฟล์ทั้งหมดที่เปลี่ยนแปลง ตอนนี้จะเปิดเพียงอันเดียวและรอให้คุณปิด
Pluc

1
โอ้ใช่ฉันรู้ แต่มันไม่มีความยืดหยุ่นที่ฉันกำลังมองหาเช่นการได้รับความแตกต่างระหว่างสองคอมมิตหรือสองสาขา และถ้าเป็นเช่นนั้นการนำทาง git ใน vs code นั้นค่อนข้างแย่มากในความคิดของฉัน ฉันชอบ UI ที่แตกต่างและผสาน ฉันกำลังไปและเห็นgit difftool -dไดเร็กทอรีที่แตกต่างกัน ฉันจะตรวจสอบวิธีการทำงานในวันพรุ่งนี้
Pluc

23

ฉันต้องแทนที่เครื่องหมายคำพูดคู่ด้วยคำพูดง่ายๆ:

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

เพื่อให้ทำงานได้อย่างถูกต้อง (ด้วยเครื่องหมายคำพูดคู่ $ LOCAL และ $ REMOTE จะถูกแทนที่ด้วยค่า)

จำเป็นหากคุณใช้Git Bashสำหรับ Windows แทนพรอมต์คำสั่งของ Windows


1
ไม่ได้สำหรับฉัน. ฉันเพิ่งทำสิ่งนี้บน Windows โดยใช้ Command Prompt บางทีคุณอาจใช้อะไรที่แตกต่างออกไป? ถ้าเป็นเช่นนั้นฉันขอแนะนำให้เพิ่มสภาพแวดล้อมที่คุณใช้เพื่อให้คนอื่น ๆ ที่มีสภาพแวดล้อมเดียวกันรู้ว่าพวกเขาจะต้องทำการเปลี่ยนแปลงนี้
Todesengel

1
@ e4rache และ @ Iztok-Delfin สิ่งที่คุณระบุไว้ที่นี่เป็นเนื้อหาที่เป็นประโยชน์ แต่คุณได้ให้คำตอบโดยบังเอิญเมื่อเป็นความคิดเห็นจริงๆ ฉันแน่ใจว่าคุณประสบปัญหาเพราะคุณไม่มีคะแนน 50 ใน SO ที่จะอนุญาตให้คุณแสดงความคิดเห็นซึ่งเป็นปัญหาขั้นตอนการทำงานของไซต์ที่ควรได้รับการพิจารณา อย่างไรก็ตามขอบคุณสำหรับการมีส่วนร่วมและฉันได้เพิ่มเคล็ดลับของคุณในคำตอบด้านบน ขอบคุณที่ช่วยเหลือผู้ที่มาทีหลังและใช้ Git Bash:^)
Eric

@ eric-d-johnson ฉันตั้งใจจะแสดงความคิดเห็นแทนการตอบกลับ (ขอโทษฉันยังใหม่กับไซต์นี้) และ btw ฉันใช้ bash บน linux มีวิธีแปลงการตอบกลับนี้เป็นความคิดเห็นหรือไม่?
e4rache

@ e4rache ฉันไม่รู้วิธีแสดงความคิดเห็น แต่บางทีผู้ดูแลอาจเห็นสิ่งนี้และให้คำแนะนำแก่เรา (คำใบ้คำใบ้) หากคุณมีคะแนน 50 คะแนนคุณสามารถแสดงความคิดเห็นเกี่ยวกับคำตอบที่ได้รับการยอมรับและลบคำตอบนี้ออกไปดังนั้นเมื่อคุณกลายเป็นดาราร็อคที่มีคะแนนมากมายคุณสามารถกลับมาที่นี่และทำสิ่งที่การทำความสะอาดทำให้คุณมีความสุขและนำกลับมา ความทรงจำที่ดีเกี่ยวกับการเริ่มต้นทั้งหมด
Eric

1
@mohamedghonemi ผลตอบรับที่ดี ฉันปรับปรุงคำอธิบายที่ด้านบนสำหรับ MacOS และ Linux ในขณะนี้ที่จะจำที่จะใช้ราคาเดียว ( 's)
Eric D.Johnson

2

ในกรณีที่มีคนต้องการแก้ไขใน Visual Studio ตัวเลือกอื่นจะทำผ่าน Visual Studio: Team Explorer -> คลิกที่ไอคอนหน้าแรก => ปุ่มการตั้งค่า => ขยายส่วน Git => คลิกที่การตั้งค่าส่วนกลาง

ใส่คำอธิบายภาพที่นี่ ใส่คำอธิบายภาพที่นี่ ใส่คำอธิบายภาพที่นี่


Visual Studio ไม่เทียบเท่ากับ Visual Studio Code วิธีการตั้งค่าเช่นนี้จะแตกต่างกันมาก ดูความแตกต่างในstackoverflow.com/a/33798601
jwd630

1
@ jwd630 ฉันรู้ว่ารหัส VS แตกต่างจาก VS. ฉันมีปัญหานี้ใน VS แต่ไม่สามารถหาวิธีแก้ไขได้ดังนั้นฉันจึงควรโพสต์ไว้ในกรณีที่มีคนประสบปัญหานี้จะดีกว่า ไม่จำเป็นต้องลงคะแนน
Daniel B

2

ด้านบนของคำตอบที่ยอดเยี่ยมคุณควรเปิด VS Code ในหน้าต่างใหม่โดยเพิ่ม-nในบรรทัดคำสั่ง

git config --global --editหน้าตาของคุณเป็นแบบนี้

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

1

เมื่อใช้คู่มือนี้คุณจะพบข้อโต้แย้งที่น่าสนใจ:

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.

ด้วยข้อมูลนี้คุณสามารถใช้คำสั่งต่อไปนี้ได้อย่างง่ายดายโดยไม่ต้องแตะคอนฟิกูเรชัน git:

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

คำถามที่คล้ายกันที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.