Использование 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%
Он заменяет путь в command
для git-commit-msg-.txt
для возможности фиксации, как было упомянуто в других ответах.
В WSL2 я использую сетевой диск: \\wsl$\<distro_name>
→ U:\
. Мой проект имеет путь в Windows: U:\home\roman\projects\experiments
, но в Linux это /home/roman/projects/experiments
. PhpStorm использует путь из Windows для работы с git, поэтому необходимо изменить путь, который может быть доступен в подсистеме Linux. Для этого я заменяю косые черты \
→ /
(STR2
) и удаляю имя диска U:
→ '' (STR3
), затем меняю текущий каталог на этот измененный путь.