通过 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 idea15的golang插件怎么配置

IntelliJ IDEA 的 Win 和 Mac 快捷键大全!!

IntelliJ IDEA (Mac) 运行速度优化

IntelliJ IDEA 2022 自定义配置及系统文件 window

解决win10下IntelliJ IDEA输入法不跟随的问题

CentOS Linux - 记录ContOS 7安装IntelliJ IDEA