Использование Git в подсистеме Windows для Linux через IntelliJ

Я пытаюсь установить Git исполняемый файл в IntelliJ как Git, установленный в подсистеме Windows для Linux, я пробовал несколько разных способов, но всегда получал какую-то ошибку. Сегодня я установил обновление для разработчиков (версия 1703), переустановил WSL и снова попробовал, вот что я сделал:

Я создал .bat script:

@echo off
C:\Windows\System32\bash.exe -c "git %*"

Поэтому при запуске:

C:\Users\Limon\Desktop>bash.bat --version
git version 2.7.4

Итак, я попытался установить эту биту в исполняемый файл Git в IntelliJ: Настройка  Git исполняемый файл в IntelliJ

И это сработало! Но все остальное не удается, например, когда я пытаюсь потянуть или разветкиться в IntelliJ, я получаю:

Couldn't check the working tree for unmerged files because of an error.
'C:\Windows\System32\bash.exe' is not recognized as an internal or external command,
operable program or batch file.

Любые идеи о том, как это исправить? Я ничего не знаю о командных сценариях. Он отлично работает от командной строки.

Ответ 1

Я искал способ использовать git в WSL Windows Subsystem для Linux через Webstorm или программное обеспечение для идей IntelliJ.

Я попробовал решение KatoPue, но получил следующую ошибку:

fatal: could not read log file 'C: /Program Files/Git/mnt/c/Users/Elies/AppData/Local/Temp/git-commit-msg-.txt': No such file or directory

Я решил это путем замены пути при отправке команды в WSL git

Settings > Version Control > Git > Path to Git executable : path_to_wslgit.bat

wslgit.bat:

@echo off
setlocal enabledelayedexpansion
set command=%*
set find=C:\Users\%USERNAME%\AppData\Local\Temp\git-commit-msg-.txt
set replace=/mnt/c/Users/%USERNAME%/AppData/Local/Temp/git-commit-msg-.txt
call set command=%%command:!find!=!replace!%%
echo | C:\Windows\Sysnative\bash.exe -c 'git %command%'

Ответ 2

В PyCharm 2018.1 я получал различные ошибки, когда пытался рассчитать Git. Я должен объединить разные подходы, чтобы заставить его работать. Следующий код работает для меня:

@echo off
setlocal enabledelayedexpansion
set command=%*
If %PROCESSOR_ARCHITECTURE% == x86 (
    echo | C:\Windows\sysnative\bash.exe -c 'git %command%'
) Else (
    echo | bash.exe -c 'git %command%'
)

UPD:

Теперь доступна интеграция с Git внутри WSL через оболочку WSLGit. Я проверил это с PyCharm, и он работает как шарм. Вот ссылка https://github.com/andy-5/wslgit

Ответ 3

Измените двойную на одинарные кавычки.

Вы можете регистрировать, какие аргументы подаются в ваш bat файл

@echo off
@echo %*>> %~dp0log.txt
bash.exe -c 'git %*'

С этим я обнаружил, что у меня были некоторые проблемы с экранированием.

FYI: с созданием резервных копий создателей Win10 bash и созданием его из программ Windows отлично работает.

Ответ 4

В PhpStorm (2017.2 EAP) я получаю ошибку

Вызывает: com.intellij.openapi.vcs.VcsException: 'bash.exe' не распознается как внутренняя или внешняя команда, операционная программа или командный файл.

Для решения я измените последнюю строку на

If %PROCESSOR_ARCHITECTURE% == x86 (
    C:\Windows\sysnative\bash.exe -c 'git %command%'
) Else (
    bash.exe -c 'git %command%'
)

Ответ 5

Для меня это решение работает:

Файл: git.bat

@echo off
setlocal enabledelayedexpansion
set command=%*
If %PROCESSOR_ARCHITECTURE% == x86 (
    C:\Windows\sysnative\bash.exe -c 'git %command%'
) Else (
    bash.exe -c 'git %command%'
)

Ответ 6

Работал до PHPSTORM 2018.3 (или, возможно, Центр обновления Windows изменил поведение в отношении bash.exe). Я использую Ubuntu 18.04 LTS. Однако путь моего bash.exe изменился - его больше нет в C:\Windows\Sysnative\bash.exe.

Чтобы все заработало снова, я изменил Elies Lou wslgit.bat и установил новый путь для bash.exe:

@echo off
setlocal enabledelayedexpansion
set command=%*
set find=C:\Users\%USERNAME%\AppData\Local\Temp\git-commit-msg-.txt
set replace=/mnt/c/Users/%USERNAME%/AppData/Local/Temp/git-commit-msg-.txt
call set command=%%command:!find!=!replace!%%
echo | C:\Windows\System32\bash.exe -c 'git %command%'

Ответ 7

Я обновил душу для работы с WSL2 с сетевым диском и PhpStorm 2019.2.

wsl_git.bat:

@echo off
setlocal enabledelayedexpansion
set command=%*
set find=C:\Users\%USERNAME%\AppData\Local\Temp\git-commit-msg-.txt
set replace=/mnt/c/Users/%USERNAME%/AppData/Local/Temp/git-commit-msg-.txt
call set command=%%command:!find!=!replace!%%
echo | wsl CURDIR="%cd%"; STR2=${CURDIR//\\//}; STR3=${STR2/U:/}; cd $STR3; git %command%
  1. Он заменяет путь в command для git-commit-msg-.txt для возможности фиксации, как было упомянуто в других ответах.

  2. В WSL2 я использую сетевой диск: \\wsl$\<distro_name>U:\. Мой проект имеет путь в Windows: U:\home\roman\projects\experiments, но в Linux это /home/roman/projects/experiments. PhpStorm использует путь из Windows для работы с git, поэтому необходимо изменить путь, который может быть доступен в подсистеме Linux. Для этого я заменяю косые черты \/ (STR2) и удаляю имя диска U: → '' (STR3), затем меняю текущий каталог на этот измененный путь.