Batch file 通过IntelliJ在Windows Linux子系统中使用Git
我试图将IntelliJ中的Git可执行文件设置为安装在Linux Windows子系统中的Git,我尝试了几种不同的方法,但总是出现一些错误。今天我安装了Creators Update(版本1703),重新安装了WSL并重试,以下是我所做的: 我创建了一个.bat脚本: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
@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
的路径,以便能够像其他答案中提到的那样提交\\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%' )
- 将
添加到git可执行文件的路径中\\wsl$\YOUR-wsl-VERSION\usr\bin\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-l
命令将名称输出为WLinux。也许它将在未来的版本中修复
这就是我的工作方式\\wsl$\Pengwin\usr\bin\git
如果您与Pengwin(WLinux)仍有问题。您需要将其作为Pengwin重新导入。
按照以下说明操作:
- 重新启动系统
- 以管理员身份打开PowerShell
。您将看到一个发行版列表,包括WLinux(默认值)wsl——列表
- 使用命令wsl--export distro_name file_name.tar进行备份
例如,
。这将需要一段时间,因为发行量可能达到几GBwsl--export-WLinux E:\backup.tar
- 确保备份已完成,然后使用命令
从WSL中删除分发WSL--unregister WLinux
- 接下来,重新导入名为Pengwin的分发
,例如wsl——导入发行名安装位置文件\u name.tar
wsl——导入Pengwin C:\Users\\Pengwin E:\backup.tar
- 将分发设置为默认
wsl--setdefault-Pengwin
- 要作为指定用户运行默认WSL发行版,请使用
WSL--user
- 将
添加到IDE的git可执行文件的路径中,然后按Test\\wsl$\Pengwin\usr\bin\git
pengwin
时,或者从开始菜单中,将安装一个新的pengwin实例。您可以使用wsl--list
命令检查这一点。新实例将显示为WLinux。如果意外创建了一个新实例,可以使用命令wsl--unregister WLinux
将其删除
为了方便使用发行版,我强烈建议安装自定义终端。你可以遵循这个指南