Как использовать код Visual Studio в качестве редактора по умолчанию для Git

365

При использовании git в командной строке мне интересно, возможно ли использовать Visual Studio Code в качестве редактора по умолчанию, то есть при создании комментариев комитетов и при просмотре различий файла из командной строки.

Я понимаю, что это не будет возможно использовать его для выполнения слияний (по крайней мере, в минуту), но кто-нибудь знает, возможно ли использовать его для просмотра различий, и если да, то какие параметры командной строки потребуются в файл .gitconfig, чтобы это произошло?

ОБНОВЛЕНИЕ 1:

Я пробовал подход, аналогичный тому, что я делал для Notepad ++ в прошлом , т.е.

#!/bin/sh

"c:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

И использовал:

#!/bin/sh

"C:\Users\gep13\AppData\Local\Code\app-0.1.0\Code.exe" "$*"

Но это приводит к сообщению об ошибке:

C:\temp\testrepo [master +1 ~0 -0]> git commit
[8660:0504/084217:ERROR:crash_reporter_win.cc(70)] Cannot initialize out-of-process crash handler
Aborting commit due to empty commit message.
C:\temp\testrepo [master +1 ~0 -0]>

Код открывается правильно, с ожидаемым содержимым, но он не ожидает ответа, т. Е. Нажимает кнопку «Сохранить» и закрывает окно, чтобы вернуться к запросу.

ОБНОВЛЕНИЕ 2:

Я только что услышал от одного из разработчиков, работающих над VSCode. Похоже, эта функциональность в настоящее время не поддерживается :-(

https://twitter.com/IsidorN/status/595501573880553472

Если вы заинтересованы в добавлении этой функции, вы можете подумать о том, чтобы добавить свои голоса здесь:

http://visualstudio.uservoice.com/forums/293070-visual-studio-code/suggestions/7756482-support-git-configure-diff-and-merge-tools

ОБНОВЛЕНИЕ 3:

Я был достоверно проинформирован о том, что команда VSCode выбрала эту функцию, поэтому я с нетерпением жду будущего выпуска, который будет включать ее.

ОБНОВЛЕНИЕ 4:

Благодаря комментарию @ f-boucheros, приведенному ниже, я смог заставить VS Code работать в качестве редактора по умолчанию для комментариев коммитов, перебазирования и т. Д. Я все еще хотел бы посмотреть, возможно ли использовать его в качестве инструмента сравнения.

ОБНОВЛЕНИЕ 5:

Согласно принятому ответу на вопрос, это теперь возможно с использованием версии V1.0 кода.

Гэри Юэн Парк
источник

Ответы:

674

В последнем выпуске (v1.0, выпущенном в марте 2016 года ) вы теперь можете использовать VS Code в качестве инструмента git commit / diff по умолчанию . Цитируется из документации:

  1. Убедитесь, что вы можете запустить code --helpиз командной строки, и вы получите помощь.

    • Если вы не видите справку, выполните следующие действия:

      • Mac: выберите команду «Shell»: установите команду «Code» в пути из палитры команд.

        • Палитра команд - это то, что появляется, когда вы нажимаете shift+ + Pвнутри кода VS. ( shift+ ctrl+ Pв Windows)
      • Windows: Убедитесь, что вы выбрали « Добавить в PATH» во время установки.
      • Linux: убедитесь, что вы установили код с помощью наших новых пакетов .deb или .rpm.
  2. Из командной строки запустите git config --global core.editor "code --wait"

Теперь вы можете запустить git config --global -eи использовать VS Code в качестве редактора для настройки Git. введите описание изображения здесь Добавьте следующее, чтобы включить поддержку использования VS Code в качестве инструмента сравнения:

[diff]
    tool = default-difftool
[difftool "default-difftool"]
    cmd = code --wait --diff $LOCAL $REMOTE

Это использует новую --diffопцию, которую вы можете передать VS Code для сравнения двух файлов рядом.

Подводя итог, вот несколько примеров, где вы можете использовать Git с VS Code:

  • git rebase HEAD~3 -i позволяет интерактивно перебазировать используя VS Code
  • git commit позволяет использовать VS Code для сообщения коммита
  • git add -pзатем eдля интерактивного добавления
  • git difftool <commit>^ <commit> позволяет использовать VS Code в качестве редактора изменений для изменений
rexcfnghk
источник
84
Я также нашел, что добавление --new-windowк команде было полезным. Таким образом, операция git откроется в новом окне.
Джротелло
2
Когда мы говорим о командной строке, мы имеем в виду Ctrl+Shift+P? Мой не работает (нет в code --helpналичии), и я не понимаю, что означает: "Убедитесь, что вы выбрали Добавить в PATH во время установки" Что я должен сделать, чтобы проверить это? Может кто-нибудь, пожалуйста, помогите мне?
Паоло Фаломо,
2
Обратите внимание, что начиная с версии 1.1 вам нужно отключить «горячий выход» или не забудьте явно сохранить файл перед выходом из vscode, иначе git не увидит никаких изменений. Если вы предпочитаете получать напоминания о необходимости сохранения при выходе, вы можете отключить эту функцию, отредактировав свои пользовательские настройки: Вставьте "files.hotExit": "off"внизу своего
конфига
6
Мне пришлось использовать git config core.editor "code -n --wait"VS Code 1.17.2, работающий из внешней командной строки. И то codeи другое code --waitдало мне «Отмена коммита из-за пустого коммита».
Роберт Калхун
3
И слияние теперь доступно, а также: [merge] tool = vscode [mergetool "vscode"] cmd = code --wait $ MERGED
Стинг
31

Насколько я понимаю, VSCode больше нет в AppData.

Поэтому установите редактор git по умолчанию, выполнив эту команду в окне командной строки:

git config --global core.editor "'C:\Program Files (x86)\Microsoft VS Code\code.exe' -w"

Параметр -w, --waitчтобы ждать , пока окно будет закрыто , прежде чем вернуться. Код Visual Studio основан на редакторе Atom. если у вас также установлен атом, выполните командуatom --help . Вы увидите последний аргумент в справке подождать.

В следующий раз, когда вы это сделаете, git rebase -i HEAD~3появится Visual Studio Code. Как только VSCode закроется, Git вернет лидерство.

Примечание. Моя текущая версия VSCode - 0.9.2.

Я надеюсь, что это поможет.

Фрэнк Баучер
источник
Спасибо! Какое значение имеет -wи где вы нашли это документально?
Гэри Юэн Парк
1
Хорошая точка зрения. Это исходит от Атома -w для ожидания. Я отредактировал свой ответ.
Фрэнк Баучер
Я настроил это, и я счастлив сказать, что это работает. Если бы я мог заставить это работать сейчас, так как Visual Studio Code также выполняет проверку файлов, это было бы здорово! :-)
Гэри Юэн Парк
10
теперь это, похоже, больше не работает с последним обновлением VS Code. У тебя есть идеи? Спасибо!
Гэри Юэн Парк
2
@GaryEwanPark: Вам нужно запустить code.cmd (или код на * nix) из подкаталога bin , чтобы параметры командной строки работали. В идеале вы должны добавить подкаталог bin в переменную окружения% PATH% (инсталлятор сделает это и для вас) и настроить запуск редактора git config --global core.editor "code --wait".
Инспектируемый
13

Вам нужно использовать команду:

git config --global core.editor "'C:\Program Files\Microsoft VS Code\code.exe' -n -w"

Убедитесь, что вы можете запустить свой редактор из Git Bash

Если вы хотите использовать Code.exe с коротким путем, вы можете сделать это, добавив следующую строку в ваш .bash_profile:

alias vscode="C:/Program\ Files/Microsoft\ VS\ Code/Code.exe"

И теперь вы можете вызвать его, используя только vscodeкоманду (или как вы ее назвали)

Некоторая дополнительная информация:

Программа установки добавит код Visual Studio в ваш% PATH%, поэтому в консоли вы можете ввести «код», чтобы открыть VS Code в этой папке. Вам потребуется перезапустить консоль после установки, чтобы изменение переменной среды% PATH% вступило в силу.

IluxaKuk
источник
1
-nэто сокращение от --new-windowgit, чтобы открыть новое окно редактора, и -wсокращение от --waitgit, чтобы вы снова закрыли окно. Это единственный ответ, который работает для меня, потому что я, если у меня уже есть открытый код VS --wait, не будет работать без --new-window.
Ян Огард
11

Еще одна полезная опция - установить EDITORпеременную окружения. Эта переменная окружения используется многими утилитами, чтобы узнать, какой редактор использовать. Git также использует его, если не core.editorустановлено.

Вы можете установить его для текущей сессии, используя:

export EDITOR="code --wait"

Таким образом, не только git, но и многие другие приложения будут использовать VS Code в качестве редактора.

Чтобы сделать это изменение постоянным, добавьте его к вашему ~/.profileпримеру. Смотрите этот вопрос для получения дополнительных возможностей.


Еще одним преимуществом этого подхода является то, что вы можете установить разные редакторы для разных случаев:

  1. Когда вы работаете с локального терминала.
  2. Когда вы подключены через сессию SSH.

Это особенно полезно с VS Code (или любым другим редактором GUI), потому что он просто не работает без GUI.

В ОС Linux поместите это в свой ~/.profile:

# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then # SSH mode
  export EDITOR='vim'
else # Local terminal mode
  export EDITOR='code -w'
fi

Таким образом, при использовании локального терминала $SSH_CONNECTIONпеременная среды будет пустой, поэтому code -wбудет использоваться редактор, но когда вы подключены через SSH, $SSH_CONNECTIONпеременная среды будет непустой строкой, поэтому vimбудет использоваться редактор. Это консольный редактор, поэтому он будет работать, даже если вы подключены через SSH.

Руслан Стельмаченко
источник
2

Я открыл свой .gitconfigи поправил его:

[core]
    editor = 'C:/Users/miqid/AppData/Local/Code/app-0.1.0/Code.exe'

Это сделало это для меня (я на Windows 8).

Тем не менее, я заметил, что после того, как я попробовал произвольно, git commitчто в моей консоли Git Bash я вижу следующее сообщение:

[9168:0504/160114:INFO:renderer_main.cc(212)] Renderer process started

Не уверен, каковы могут быть последствия этого.

miqh
источник
Я также пытался это сделать, однако, я получал строку 14 файла «fatal: bad config» в C: \ Users \ gep13 / .gitconfig », затем я заметил, что у меня есть обратные слеши, где у вас есть косые черты. Изменение этого раунда сделало его работоспособным, но, как и вы, я вижу вывод «Процесс рендерера запущен», который на самом деле выводит дважды для меня, а затем показывает: «[11956: 0504/091108: ОШИБКА: ipc_channel_win.cc (136)] pipe ошибка: 109 "но фиксация действительно сработала.
Гэри Юэн Парк
Ах, интересно. Похоже, что мое предложение работает только в том случае, если у вас есть полностью закрытый код (не очень удобно!) Перед выполнением фиксации. Я обнаружил ту же ошибку, о которой вы сообщили в своем обновлении, если открыт код.
miqh
действительно интересно. Я предполагаю, что именно здесь вступит в силу флаг -multiInst для Notepad ++. Интересно, есть ли что-то подобное для VSCode.
Гэри Юэн Парк
Только FYI, app-0.1.0/resources/app/env.jsкажется, содержит несколько флагов командной строки, которые принимает исполняемый файл Code. Никто не предполагает поведение , эквивалентный -multiInstхотя.
miqh
вам нужно добавить --waitфлаг, и этот --new-windowфлаг также настоятельно рекомендуется, чтобы коммит msg / diff / what не просто отображался как новая вкладка в уже открытом редакторе, требуя от вас закрытия файлов, которыми вы все еще можете быть работает над тем, чтобы дать сигнал git, что вы закончили редактирование.
Изохронный
1

GitPad устанавливает ваш текущий текстовый редактор в качестве редактора по умолчанию для Git.

Мой редактор по умолчанию для .txtфайлов в Windows 10 - это Visual Studio Code, и запуск GitPad однажды сделал его редактором по умолчанию для Git. Я не испытывал проблем, упомянутых в вопросе (в моем случае Git ждет, пока не закроется окно VS Code).

(Ссылка на .exeфайл не работает для меня, возможно, вам придется скомпилировать исходный код самостоятельно.)

Шафак Гюр
источник
На что вы указали в качестве редактора по умолчанию? Я пытался использовать то, что описано здесь: donovanbrown.com/post/2015/07/07/… Но это, похоже, не работает. На самом деле не хочу указывать на конкретный exe-файл, поскольку он будет меняться по мере обновления кода.
Гэри Юэн Парк
1
@Gary, я не должен указать конкретный файл, код был в списке , когда я Right click> Open with> Chose another app. Я ожидал, что он зарегистрирует себя при настройке (и обновит реестр при каждом обновлении, чтобы оболочка могла его найти), но я не смог найти ничего, кроме пункта контекстного меню «Открыть с кодом» в реестре. Так что у меня действительно нет более ясного ответа на это, извините.
Шафак Гюр
Хм, это странно, у меня нет кода в качестве записи в списке, который появляется, когда я это делаю.
Гэри Юэн Парк
1

Хорошие новости! На момент написания статьи эта функция уже была реализована в выпуске 0.10.12-инсайдеров и реализована через 0.10.14-инсайдеров . Следовательно, мы собираемся сделать это в следующей версии VS Code 1.0. .

Реализация Ref: Реализация -w / - ждать командной строки arg

Васиф Хоссейн
источник
Можете ли вы прокомментировать, как я смогу использовать средство просмотра различий в VSCode для просмотра различий в Git?
Гэри Юэн Парк
1

Просто хочу добавить эти обратные косые черты к предыдущим ответам, я нахожусь на Windows 10 CMD, и это не работает без обратной косой черты перед пробелами.

git config --global core.editor "C:\\Users\\your_user_name\\AppData\\Local\\Programs\\Microsoft\ VS\ Code\\Code.exe"
Виктор Ма
источник
Я смог добавить с помощью: git config --global core.editor "'C: \ Users \ cbre_admin \ AppData \ Local \ Programs \ Microsoft VS Code \ Code.exe' -w"
rjt011000
0

Я не уверен, что вы можете сделать это, однако вы можете попробовать эти дополнения в вашем файле gitconfig.

Попробуйте заменить kdiff3 на эти значения, чтобы они указывали на исполняемый код Visual Studio.

[merge] tool = kdiff3 [mergetool "kdiff3"] path = C:/Program Files/KDiff3/kdiff3.exe keepBackup = false trustExitCode = false

SJMan
источник
Как я уже упоминал в своем вопросе, я не думаю, что слияние будет поддерживаться, так как я не думаю, что Visual Studio Code знает, как это сделать, я подозреваю, что он сможет выполнять только diff и фиксировать сообщения.
Гэри Юэн Парк
0

Я установил Visual Studio Code по умолчанию для открытия .txt файла. И затем я сделал команду использовать простой: git config --global core.editor "'C:\Users\UserName\AppData\Local\Code\app-0.7.10\Code.exe\'". И все работает довольно хорошо.

Zidu
источник
0

Запустите эту команду в приложении Mac Terminal

git config --global core.editor "/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code"
Мухаммед
источник
2
Это не совсем работает, так как вы получаете сообщение об ошибке: «Отмена фиксации из-за пустого сообщения фиксации». Необходимо будет добавить флаг ожидания. Например - ждать.
Belfield
0

на Windows 10 с использованием 64-битной версии инсайдеров команда должна быть:

git config --global core.editor "'C: \ Program Files \ Microsoft VS Code Insiders \ bin \ code-insiders.cmd'"

Вы также можете переименовать «code-insiders.cmd» в «code.cmd» в каталоге «Program Files», таким образом, теперь вы можете использовать команду «code». начать редактирование файлов на. каталог

Луис Карлос Родригес
источник