通过 IntelliJ 在 Linux 的 Windows 子系统中使用 Git
Posted
技术标签:
【中文标题】通过 IntelliJ 在 Linux 的 Windows 子系统中使用 Git【英文标题】:Using Git in Windows Subsystem for Linux through IntelliJ 【发布时间】:2017-09-25 17:37:34 【问题描述】:我正在尝试将 IntelliJ 中的 Git 可执行文件设置为安装在适用于 Linux 的 Windows 子系统中的 git,我尝试了几种不同的方法,但总是出现某种错误。今天我安装到 Creators Update(版本 1703),重新安装了 WSL 并再次尝试,这是我所做的:
我创建了一个 .bat 脚本:
@echo off
C:\Windows\System32\bash.exe -c "git %*"
所以在运行时:
C:\Users\Limon\Desktop>bash.bat --version
git version 2.7.4
然后我尝试在 IntelliJ 的 git 可执行文件中设置这个 bat:
它奏效了!但是其他一切都失败了,例如当我尝试在 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】:我正在寻找一种通过 Webstorm 或 IntelliJ idea 软件在适用于 Linux 的 WSL Windows 子系统上使用 git 的方法。
我尝试了 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%'
【讨论】:
当我尝试这个时,命令永远不会从 intellij 返回;它只是永远挂起。不过,在命令行上运行它可以正常工作(例如,git.bat config --list
)。此外,%string%
变量未定义,导致日志文件中出现“回声关闭”。我尝试在最后一行的 git 命令中添加--no-pager
,但没有帮助。
啊,明白了。您可以通过将空字符串传递给 bash.exe 来解决此问题:echo | bash.exe ...
这个答案在 VS Code 上对我有用!向周围的人致敬和感谢!
如果您收到错误“\bash.exe' 不是内部或外部命令、可运行程序或批处理文件。”然后尝试C:\Windows\Sysnative\bash.exe
。
当我使用它时,我得到了错误could not read log file 'C:UsersNameAppDataLocalTempgit-commit-msg-.txt': No such file or directory
,显然所有的斜线都以某种方式被删除了。【参考方案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%'
)
更新:
现在可以通过 WSLGit 包装器与 WSL 中的 Git 集成。我已经用 PyCharm 检查了它,它就像一个魅力。这是一个链接https://github.com/andy-5/wslgit
【讨论】:
github.com/andy-5/wslgit 为我工作了 WSL 2 和 phpStorm 2019.3。谢谢你。【参考方案3】:由于WebStorm 2020.2 EAP是可能的。
只需将\\wsl$\YOUR-WSL-VERSION\usr\bin\git
添加到Git 可执行文件的路径:
要获取您的WSL VERSION
,请在控制台中输入wsl -l
【讨论】:
这太棒了!滚动到底部得到了回报:D 当我点击测试而不是 git 版本时,我得到一个提示 git 没有安装,点击它后弹出一个窗口将 git for windows 降级到 2.24.1.2,然后 git for windows再次设置为我的 git @notacorn 您安装了哪个版本的 WebStorm? 我已经安装了 intellij 2020.1.4,所以这可能是我的问题@Gabrielizalo 现在正在等待龙目岛 @notacorn 我对 PyCharm 也有同样的问题。但我刚刚更新了 Git 可执行文件的路径,并且使用测试按钮出现错误。我只是忽略它。无论如何它都有效。【参考方案4】:将双引号改为单引号。
您可以记录,将哪些参数输入到您的 bat 文件中
@echo off
@echo %*>> %~dp0log.txt
bash.exe -c 'git %*'
这样,我发现我有一些逃避问题。
仅供参考:随着 Win10 创建者更新管道 bash 并从 Windows 程序生成它工作正常。
【讨论】:
【参考方案5】:在 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%'
)
【讨论】:
【参考方案6】:对我来说,这个解决方案有效:
文件: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%'
)
【讨论】:
【参考方案7】:一直工作到 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%'
【讨论】:
【参考方案8】:我更新了灵魂,以使用带有网络驱动器和 PhpStorm 2019.2 的 WSL2。
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
) 然后将当前目录更改为这个修改后的路径。
【讨论】:
【参考方案9】:正如 Gabrielizalo 之前回答的那样,您需要使用 2020.2 及更高版本。
转到设置|版本控制 |吉特
将\\wsl$\YOUR-WSL-VERSION\usr\bin\git
添加到Git 可执行文件的路径
按测试
请注意,如果您使用的是 WLinux 发行版,则需要使用名称 Pengwin。
即使wsl -l
命令将名称输出为 WLinux。也许它会在未来的版本中修复。
这对我来说就是这样\\wsl$\Pengwin\usr\bin\git
。
如果您仍然遇到 Pengwin (WLinux) 的问题。您需要将其重新导入为 Pengwin。 请遵循以下说明:
重新启动系统。 以管理员身份打开 PowerShell。wsl --list
。您将看到一个发行版列表,包括 WLinux(默认)。
使用命令wsl --export distro_name file_name.tar
进行备份。
例如,wsl --export WLinux E:\backup.tar
。这需要一些时间,因为分发可能会达到数 GB。
确保备份已完成,然后使用命令 wsl --unregister WLinux
从 WSL 中删除分发。
接下来,重新导入名为 Pengwinwsl --import distro_name install_location file_name.tar
的发行版,例如,wsl --import Pengwin C:\Users\<USERNAME>\pengwin E:\backup.tar
将分配设置为默认wsl --setdefault Pengwin
要以指定用户身份运行默认 WSL 发行版,请使用 wsl --user <Username>
将\\wsl$\Pengwin\usr\bin\git
添加到IDE 的Git 可执行文件路径,然后按Test
注意,现在在 cmd 或 开始菜单 中使用 pengwin
时,将安装一个新的 Pengwin 实例。您可以使用wsl --list
命令进行检查。新实例将显示为 WLinux。如果不小心新建了一个实例,可以使用wsl --unregister WLinux
命令删除。
为了方便使用您的发行版,我强烈建议安装自定义终端。您可以按照本指南How to setup a nice looking terminal with WSL in Windows 10。
【讨论】:
使用wsl1时,需要Enable the git.allow.wsl1.executables option in IDE Registry (Help - FInd Action - Registry...)
,就像youtrack.jetbrains.com/issue/IDEA-242469一样【参考方案10】:
-
在 wsl 文件系统中安装您的项目文件,如果您使用 docker,您将需要这个任何方式;p
从 \wsl$ 打开您的项目
(如果需要)转到设置 > 版本控制 > Git > 并简单地清除 Git 可执行文件的路径
而且这个工作非常好!
【讨论】:
以上是关于通过 IntelliJ 在 Linux 的 Windows 子系统中使用 Git的主要内容,如果未能解决你的问题,请参考以下文章
IntelliJ IDEA 的 Win 和 Mac 快捷键大全!!
IntelliJ IDEA 2022 自定义配置及系统文件 window