Cara menggunakan Visual Studio Code sebagai editor default untuk Git MergeTool

122

Hari ini saya mencoba menggunakan git mergetoolpada command prompt Windows dan menyadari bahwa itu default menggunakan Vim , yang keren, tapi saya lebih suka VS Code .

Bagaimana saya dapat memiliki fungsi Visual Studio Code sebagai GUI saya untuk menangani konflik gabungan (atau bahkan sebagai alat diffing) untuk Git?

Eric D. Johnson
sumber

Jawaban:

240

Pada Visual Studio Code 1.13 Penggabungan yang lebih baik telah diintegrasikan ke dalam inti Visual Studio Code.

Cara untuk menyatukannya adalah dengan memodifikasi Anda .gitconfigdan Anda memiliki dua opsi .

  1. Untuk melakukan ini dengan entri baris perintah, masukkan masing-masing berikut ini: (Catatan: ganti "dengan 'di Windows Git Bash, macOS dan Linux seperti yang dijelaskan oleh Iztok Delfin dan 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. Untuk melakukan ini dengan menempelkan beberapa baris .gitconfig dengan Visual Studio Code .

    • Jalankan git config --global core.editor "code --wait"dari baris perintah.
    • Dari sini Anda dapat memasukkan perintah git config --global -e. Anda akan ingin menempelkan kode di "Blok Ekstra" di bawah ini.

      [user]
          name = EricDJohnson
          email = [email protected]
      [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"
      

Sekarang dari dalam direktori Git Anda dengan konflik yang dijalankan git mergetooldan, tada, Anda memiliki Visual Studio Code yang membantu Anda menangani konflik penggabungan! (Pastikan untuk menyimpan file Anda sebelum menutup Visual Studio Code.)

Terima Perubahan Masuk siapa pun?

Untuk bacaan lebih lanjut tentang peluncuran codedari baris perintah, lihat dokumentasi ini .

Untuk informasi lebih lanjut, git mergetoollihat dokumentasi ini .

Eric D. Johnson
sumber
3
Ada baris di atas <<<< Head, yang disisipkan yang mencantumkan opsi: "Terima Perubahan Saat Ini | Terima Perubahan Masuk | Terima Kedua Perubahan | Bandingkan Perubahan" dan saya yakin itu menyisipkan ini pada setiap bagian perubahan yang terdeteksi dalam file . Tetapi dalam suatu bagian jika Anda ingin menggabungkan sedikit ini dan sedikit secara manual, saya yakin Anda akan membuat perubahan itu di lokal Anda dan kemudian pergi dengan opsi "Terima Perubahan Saat Ini". Jadi, alur kerja memang membuat Anda mundur selangkah untuk mengambil langkah maju. Jika orang lain menyelesaikan masalah ini dengan cara berbeda, silakan posting di sini untuk mendidik kami
Eric D. Johnson
3
Saya mendapatkan kesalahan unknown tool: vscode... Saya cukup yakin untuk memanggil VsCode dari baris perintah yang harus Anda gunakan codesebagai gantivscode
Kolob Canyon
19
Juga, ini tidak berhasil untuk saya. Itu hanya muncul membuka VsCode dan tidak ada file yang pernah dibawa
Kolob Canyon
1
Yang ingin saya lakukan adalah "giff difftool mybranch master" dan membuka kode VS dengan diff dari semua file yang diubah. Saat ini, itu hanya akan membuka satu dan menunggu Anda untuk menutupnya.
Pluc
1
Oh ya, saya tahu itu, tetapi tidak memiliki fleksibilitas yang saya cari seperti mendapatkan perbedaan antara dua komit atau dua cabang. Dan jika ya, menavigasi git in vs code cukup mengerikan menurut saya. Saya hanya suka perbedaan mereka dan menggabungkan UI. Saya pergi dan melihat git difftool -duntuk direktori diff. Saya akan memeriksa cara kerjanya besok.
Pluc
23

Saya harus mengganti tanda kutip ganda dengan tanda kutip sederhana:

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

agar berfungsi dengan baik (dengan tanda kutip ganda, $ LOCAL dan $ REMOTE diganti dengan nilainya).

Ini diperlukan jika Anda menggunakan Git Bash untuk Windows, bukan Windows Command Prompt.

e4rache.dll
sumber
1
Bukan untuk saya. Saya baru saja melakukan ini di Windows menggunakan Command Prompt. Mungkin Anda menggunakan sesuatu yang berbeda? Jika demikian, saya sarankan menambahkan lingkungan mana yang Anda gunakan sehingga orang lain dengan lingkungan yang sama akan tahu bahwa mereka perlu melakukan perubahan ini.
Todesengel
1
@ e4rache dan @ Iztok-Delfin yang Anda cantumkan di sini adalah konten yang bermanfaat, tetapi Anda tidak sengaja membuatnya menjadi jawaban, padahal itu benar-benar sebuah komentar. Saya yakin Anda mengalami masalah karena Anda tidak memiliki poin 50 di SO untuk memungkinkan Anda berkomentar, yang merupakan jenis masalah alur kerja situs yang mungkin harus diperhatikan. Bagaimanapun, terima kasih telah berkontribusi, dan saya menambahkan tip Anda dalam jawaban saya di atas. Terima kasih telah membantu mereka yang datang nanti dan menggunakan Git Bash:^)
Eric D. Johnson
@ eric-d-johnson Saya benar-benar bermaksud memberi komentar alih-alih membalas. (maaf, saya baru mengenal situs ini) dan btw saya menggunakan bash di linux. Adakah cara untuk mengubah balasan ini menjadi komentar?
e4rache
@ e4rache Saya tidak tahu cara untuk memberikan komentar, tapi mungkin moderator akan melihat ini dan memberi kami beberapa tip (petunjuk, petunjuk). Jika Anda memiliki 50 poin, Anda dapat memberi komentar pada jawaban yang diterima, dan menghapus yang ini, jadi begitu Anda menjadi bintang rock SANGAT terkenal dengan banyak poin, Anda dapat kembali ke sini dan melakukan pekerjaan rumah tangga apa pun yang membuat Anda bahagia dan membawanya kembali. kenangan indah tentang bagaimana semuanya dimulai.
Eric D. Johnson
1
@mohamedonemi Umpan balik yang bagus. Saya memperbarui penjelasan di bagian atas untuk macOS dan Linux sekarang untuk mengingat untuk menggunakan tanda kutip tunggal '.
Eric D. Johnson
2

Jika seseorang ingin menyelesaikannya di Visual Studio, opsi lain adalah melakukannya melalui Visual Studio: Team Explorer -> klik ikon Beranda => tombol Pengaturan => luaskan bagian Git => klik Pengaturan Global

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Daniel B
sumber
Visual Studio tidak setara dengan Visual Studio Code. Cara pengaturan seperti ini dilakukan sangat berbeda. Lihat stackoverflow.com/a/33798601 untuk mengetahui perbedaannya
jwd630
1
@ jwd630 Saya tahu kode VS berbeda dari VS. Saya mengalami masalah ini di VS tetapi tidak dapat menemukan solusi untuk itu jadi saya pikir akan lebih baik untuk mempostingnya jika seseorang mengalami masalah ini. Tidak perlu down-vote.
Daniel B
2

Di atas jawaban bagus yang sudah ada , Anda harus membuka VS Code di jendela baru dengan menambahkan -nke baris perintah.

Jadi git config --global --editpenampilan Anda seperti ini.

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

Dengan menggunakan manual, Anda dapat menemukan argumen yang menarik:

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.

Dengan informasi ini, Anda dapat dengan mudah menggunakan perintah berikut tanpa menyentuh konfigurasi git:

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

Pertanyaan serupa di sini

Gomino
sumber