【问题标题】:Using Git in Windows Subsystem for Linux through IntelliJ通过 IntelliJ 在 Linux 的 Windows 子系统中使用 Git
【发布时间】: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.

关于如何解决这个问题的任何想法?我对批处理脚本一无所知。它可以在命令行下完美运行。

【问题讨论】:

    标签: batch-file intellij-idea windows-subsystem-for-linux


    【解决方案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

    【讨论】:

    【解决方案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%
            
            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) 然后将当前目录更改为这个修改后的路径。

              李>

            【讨论】:

              【解决方案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 中删除分发。
              • 接下来,重新导入名为 Pengwin
                wsl --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

              【讨论】:

              【解决方案10】:
              1. 在 wsl 文件系统中安装您的项目文件,如果您使用 docker,您将需要这个任何方式;p
              2. 从 \wsl$ 打开您的项目
              3. (如果需要)转到设置 > 版本控制 > Git > 并简单地清除 Git 可执行文件的路径

              而且这个工作非常好!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-01-09
                • 2018-06-25
                • 1970-01-01
                • 2019-08-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多