Batch file 通过IntelliJ在Windows Linux子系统中使用Git

Batch file 通过IntelliJ在Windows Linux子系统中使用Git,batch-file,intellij-idea,windows-subsystem-for-linux,Batch File,Intellij Idea,Windows Subsystem For Linux,我试图将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 ver

我试图将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.

有没有办法解决这个问题?我对批处理脚本一无所知。它在命令行之外工作得非常好。

将双引号改为单引号

您可以记录哪些参数被提供给bat文件

@echo off
@echo %*>> %~dp0log.txt
bash.exe -c 'git %*'
有了这些,我发现我有一些逃避问题


仅供参考:Win10创建者更新piping bash并从Windows程序生成它,效果很好。

我正在寻找一种方法,通过Webstorm或IntelliJ idea软件在WSL Windows Linux子系统上使用git

我尝试了KatoPue的解决方案,但出现以下错误:

fatal:无法读取日志文件'C:/Program Files/Git/mnt/C/Users/elis/AppData/Local/Temp/Git commit msg-.txt':没有这样的文件或目录

我在向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%'
在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%'
)

在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:


现在可以通过WSLGit包装器在WSL内部与Git集成。我已经用PyCharm检查过了,它的工作就像一个符咒。这里有一个链接

供我使用此解决方案:

文件: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%'
)

一直工作到PHPSTORM 2018.3(或者可能是Windows更新改变了有关bash.exe的某些行为)。我正在使用Ubuntu18.04LTS。但是,我的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%'

我更新了soultion,使其能够使用带有网络驱动器和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%
  • 它替换了
    命令
    中用于
    git commit msg-.txt
    的路径,以便能够像其他答案中提到的那样提交

  • 对于WSL2,我使用网络驱动器:
    \\wsl$\
    ->
    U:\
    。我的项目在Windows上有路径:
    U:\home\roman\projects\experiments
    ,但在Linux上是
    /home/roman/projects/experiments
    。PhpStorm使用Windows中的路径来处理git,因此需要更改Linux子系统中可以访问的路径。要实现这一点,我将替换斜杠
    \
    ->
    /
    STR2
    )并删除驱动器名
    U:
    ->`(
    STR3
    ),然后将当前目录更改为此修改路径

  • 因为这是可能的

    只需将
    \\wsl$\YOUR-wsl-VERSION\usr\bin\git
    添加到git可执行文件的路径:

    要获得您的
    WSL版本
    在控制台中键入
    WSL-l

    ,正如Gabrielizalo先前回答的那样,您需要使用版本2020.2及更高版本

    • 转到设置|版本控制| Git

      @echo off
      setlocal enabledelayedexpansion
      set command=%*
      If %PROCESSOR_ARCHITECTURE% == x86 (
          C:\Windows\sysnative\bash.exe -c 'git %command%'
      ) Else (
          bash.exe -c 'git %command%'
      )
      
    • \\wsl$\YOUR-wsl-VERSION\usr\bin\git
      添加到git可执行文件的路径中

    • 测试

      @echo off
      setlocal enabledelayedexpansion
      set command=%*
      If %PROCESSOR_ARCHITECTURE% == x86 (
          C:\Windows\sysnative\bash.exe -c 'git %command%'
      ) Else (
          bash.exe -c 'git %command%'
      )
      
    请注意,如果您使用的是WLinux发行版,则需要使用名称Pengwin。 即使
    wsl-l
    命令将名称输出为WLinux。也许它将在未来的版本中修复

    这就是我的工作方式
    \\wsl$\Pengwin\usr\bin\git

    如果您与Pengwin(WLinux)仍有问题。您需要将其作为Pengwin重新导入。 按照以下说明操作:

    • 重新启动系统
    • 以管理员身份打开PowerShell
    • wsl——列表
      。您将看到一个发行版列表,包括WLinux(默认值)
    • 使用命令wsl--export distro_name file_name.tar进行备份
      
      例如,
      wsl--export-WLinux E:\backup.tar
      。这将需要一段时间,因为发行量可能达到几GB
    • 确保备份已完成,然后使用命令
      WSL--unregister WLinux
      从WSL中删除分发
    • 接下来,重新导入名为Pengwin的分发
      wsl——导入发行名安装位置文件\u name.tar
      ,例如
      wsl——导入Pengwin C:\Users\\Pengwin E:\backup.tar
    • 将分发设置为默认
      wsl--setdefault-Pengwin
    • 要作为指定用户运行默认WSL发行版,请使用
      WSL--user
    • \\wsl$\Pengwin\usr\bin\git
      添加到IDE的git可执行文件的路径中,然后按Test
    注意,现在在cmd中使用
    pengwin
    时,或者从开始菜单中,将安装一个新的pengwin实例。您可以使用
    wsl--list
    命令检查这一点。新实例将显示为WLinux。如果意外创建了一个新实例,可以使用命令
    wsl--unregister WLinux
    将其删除

    为了方便使用发行版,我强烈建议安装自定义终端。你可以遵循这个指南

  • 在wsl文件系统中安装您的项目文件,如果您选择docker,您将以任何方式需要此文件;p
  • 从\wsl打开您的项目$
  • (如果