Visual Studio CodeをGit MergeToolのデフォルトエディターとして使用する方法


121

私が使用しようとしていた今日git mergetoolのWindowsには、コマンドプロンプトとそれが使用するデフォルト設定されたことに気づいVimの涼しいです、が、私は好むVSコードを

Gitのマージ競合を処理するためのGUIとして(または差分ツールとしても)Visual Studio Code関数を使用するにはどうすればよいですか?

回答:


240

のとしてVisual Studioのコード1.13 より良いマージ Visual Studioのコードのコアに統合されました。

それらを一緒に配線する方法は、を変更する.gitconfigことであり、2つのオプションがあります

  1. コマンドラインエントリでこれを行うには、これらのそれぞれを入力します(注:置き換える"'WindowsのGitのバッシュ、MacOSのLinuxでIztokデルフィンと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。以下の「追加ブロック」のコードに貼り付けます。

      [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を閉じる前に必ずファイル保存してください。)

受信変更を受け入れますか?

codeコマンドラインからの起動に関する詳細については、このドキュメントをご覧ください

より詳しい情報についてはgit mergetoolチェックアウトのこのドキュメント


3
<<<<ヘッドの上に、オプションを一覧表示する挿入された行があります。「現在の変更を受け入れる|変更を受け入れる|両方の変更を受け入れる|変更を比較する」と、ファイル内の検出された変更の各セクションにこれを挿入すると思います。しかし、セクション内で、これと少しを手動でカスタムマージする場合は、ローカルでその変更を行い、[現在の変更を受け入れる]オプションを使用すると思います。したがって、ワークフローは、一歩前進するために、少し前に戻る必要があります。他の人が別の方法でこれを解決する場合は、ここに投稿して私たちを教育してください
エリックD.ジョンソン

3
私はエラーを取得しunknown tool: vscode、私はあなたが使用する必要があり、コマンドラインからVsCodeを呼び出すためにかなり確信している... codeの代わりにvscode
Kolobキャニオン

19
また、これは私のために働いていません。VsCodeを開くだけで、ファイルは表示されません
Kolob Canyon

1
私がやりたいことは、「giff difftool mybranch master」であり、変更されたすべてのファイルのdiffでVSコードを開いています。現時点では、1つだけ開いて、閉じるのを待ちます。
Pluc、

1
ああ、わかっていますが、2つのコミットまたは2つのブランチ間の差分を取得するような、探している柔軟性がありません。そしてもしそうなら、コード内でgitをナビゲートすることは私の考えではかなり恐ろしいことです。私は彼らの差分とマージUIが好きです。私は行っgit difftool -dて、ディレクトリの相違点を見つけました。それが明日どのように機能するかを確認します。
Pluc

23

二重引用符を単純な引用符に置き換える必要がありました。

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

それが正しく機能するため(二重引用符を使用すると、$ LOCALと$ REMOTEはそれらの値で置き換えられます)。

これは、WindowsコマンドプロンプトではなくGit Bash for Windows を使用している場合に必要です。


1
私のためではありません。Windowsでコマンドプロンプトを使用してこれを実行しました。多分あなたは何か違うものを使っていますか?その場合は、使用している環境を追加して、同じ環境を持つ他のユーザーがこの変更を行う必要があることを認識できるようにすることをお勧めします。
トデセンゲル2018

1
ここにリストした@ e4racheと@ Iztok-Delfinは役立つコンテンツですが、実際にコメントであるにもかかわらず、誤って回答にしてしまいました。あなたがコメントすることを許可するSOの50ポイントを持っていなかったので、問題に遭遇したと私は確信しています。とにかく、貢献してくれてありがとう、そして私は上の私の答えにあなたのヒントを追加しました。後で来てGit Bashを使用している人たちを助けてくれてありがとう:^)
エリックD.ジョンソン

@ eric-d-johnson返信ではなくコメントを投稿するつもりでした。(申し訳ありませんが、私はこのサイトを初めて利用しました)ところで、Linuxでbashを使用していました。この返信をコメントに変換する方法はありますか?
e4rache

@ e4racheコメントにする方法はわかりませんが、おそらくモデレーターがこれを見て、いくつかのヒント(ヒント、ヒント)を教えてくれます。50ポイントがあった場合は、受け入れられた回答にコメントを付けて、これを削除できます。そのため、大量のポイントを持つSOロックスターになったら、ここに戻って、ハウスキーピングがあなたを幸せにし、呼び戻すことができます。すべての始まりの良い思い出。
エリックD.ジョンソン

1
@mohamedghonemi良いフィードバック。単一引用符(')を使用することを忘れないように、macOSとLinuxの上部にある説明を更新しました。
エリックD.ジョンソン

2

誰かがVisual Studioでそれを解決したい場合、別のオプションはVisual Studioを介してそれを行うことです:チームエクスプローラー->ホームアイコンをクリック=>設定ボタン=> Gitセクションを展開=>グローバル設定をクリック

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


Visual StudioはVisual Studio Codeと同等ではありません。このような設定が行われる方法はかなり異なります。違いについては、stackoverflow.com
a / 33798601を

1
@ jwd630 VSコードがVSと異なることを知っています。私はVSでこの問題を抱えていましたが、その解決策を見つけることができなかったので、誰かがこの問題を経験している場合に備えて投稿することをお勧めします。反対投票する必要はありません。
ダニエルB

2

既存優れた回答に加え-nて、コマンドラインにを追加して、VS Codeを新しいウィンドウで開く必要があります。

だからあなた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.