ConEmu build: 180626 x64 (portable)
OS version: Windows 10 Pro Build 17134 x64
Used shell version: wslbridge + zsh
Git for Windows (installed separately) doesn't find .gitconfig in windows user profile when running git through wslbridge, instead looking for the global gitconfig in %ConEmuBaseDirShort%/home/budi/.gitconfig. But running Git for Windows through wsl.exe + zsh works fine.
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pnm:/mnt -t zsh
git.exe config --global --listfatal: unable to read config file 'C:/Program Files/ConEmu/App/ConEmu/ConEmu/home/budi/.gitconfig': No such file or directory
user.name=nickbudi
(prints rest of .gitconfig...)
How does git-for-windows relates to WSL?
You may (and probably should?) install git via apt.
Anyway, it's a question to wslbridge why only specially defined environment variables are passed to WSL side. You may define them in you task just after --wsl switch like -eUSERPROFILE.
Git for Windows doesn't really relate to WSL, I just would like to use Git for Windows from a WSL shell since native git on WSL has performance issues.
@nickbudi have you found any decision yet?
In VSCode i can't using git correctly, because of PATH variable changes at ConEmu startup.
Without opening ConEmu everything works great.
@Maximus5 can i use wsl bash without changing PATH like this
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl
some how
Git for Windows breaks due to these changes.
Hello, this one helped me:
echo "export WSLENV=HOME/p" >> ~/.profile
WSLENV will forward all passed env variables to wsl, flag \p will convert wsl to windows path.
Repeated from https://github.com/rprichard/wslbridge/issues/32#issuecomment-575919350:
@zviryatko
The problem with export WSLENV=HOME/p is that the Windows HOME variable then points to the WSL directory, so git for Windows is then using the .gitconfig of you WSL user. That may or may not be what you want.
Repeated from https://github.com/rprichard/wslbridge/issues/32#issuecomment-575918995:
Tested with git-for-windows version 2.25.0.windows.1 and wslbridge-0.2.4-cygwin64:
C:\Users\username>echo %HOME%
%HOME% so HOME is not set in my global environment
C:\Users\username>D:\Programs\Git\bin\git.exe config --global -e
has opened C:/Users/username/.gitconfig
C:\Users\username>D:\ExcludeFromBackup\tmp\wslbridge-0.2.4-cygwin64\wslbridge.exe
User@hostname:/mnt/c/Users/username$ echo $HOME
/home/User
User@hostname:/mnt/c/Users/username$ cmd.exe /c@ echo '%HOME%'
D:\ExcludeFromBackup\tmp\home\username Windows Environment variable 'HOME' is set to
a different value than WSL internal 'HOME'
User@hostname:/mnt/c/Users/username$ /mnt/d/Programs/Git/bin/git.exe config --global -e
fatal: cannot create configuration file D:/ExcludeFromBackup/tmp/home/Timo/.gitconfig: No such file or directory
git for Windows looks in Windows Environment variable 'HOME'
The value of Windows Environment variable HOME has the value it had, when WSL was launched, so in this case its the value it had within wslbridge.exe. As wslbridge.exe is a cygwin application, cygwin1.dll startup code ensures, that a proper cygwin environment is present. cygwin1.dll assumes, that the cygwin root directory is one directory above the directory in which cygwin1.dll is located. If HOME is not set, cygwin sets it to cygwin-root\home\username.
Git for Windows checks if HOME is set, and in that case assumes, that its .gitconfig is located there. Otherwise it assumes that .gitconfig is located in the Windows User home directory.
Create file nsswitch.conf in <path to cygwin1.dll>\..\etc\ containing db_home: <cygwin style path to desired location> (See https://stackoverflow.com/questions/1494658/how-can-i-change-my-cygwin-home-folder-after-installation for nsswitch.conf)
C:\Users\username>mkdir D:\ExcludeFromBackup\tmp\wslbridge-0.2.4-cygwin64\..\etc\ C:\Users\username>echo db_home: /%H > D:\ExcludeFromBackup\tmp\wslbridge-0.2.4-cygwin64\..\etc\nsswitch.conf
/%H means, that the cygwin HOME variable is set to the Windows User home directory, which is the path, where git for Windows otherwise looks by default.
C:\Users\username>D:\ExcludeFromBackup\tmp\wslbridge-0.2.4-cygwin64\wslbridge.exe
User@hostname:/mnt/c/Users/username$ echo $HOME
/home/User
User@hostname:/mnt/c/Users/username$ cmd.exe /c@ echo '%HOME%'
C:\Users\username
User@hostname:/mnt/c/Users/username$ /mnt/d/Programs/Git/bin/git.exe config --global -e
has opened C:/Users/username/.gitconfig
ConEmu.exe -run "{Shells::Cmd (Admin)}"
Or open admin cmd with ConEmu-variables set in any way. Then:
mkdir "%ConEmuBaseDir%\etc"
echo db_home: /%H > "%ConEmuBaseDir%\etc\nsswitch.conf"
exit
@Maximus5
Could you possibly add a file %ConEmuBaseDir%\etc\nsswitch.conf containing db_home: /%H to the standard installation? (Or move current contents of %ConEmuBaseDir%\wsl into %ConEmuBaseDir%\wsl\bin and add %ConEmuBaseDir%\wsl\etc\nsswitch.conf)
The way it is currently, the Windows Environment Variable HOME points to an invalid path when you open WSL with the default wslbridge configuration if you don't have a global Windows Environment Variable HOME set for your user.
For me the problem wasn't with git for Windows, but with pulseaudio:
User@hostname:/mnt/c/Users/username$ /mnt/d/Program\ Files/pulseaudio-1.1/bin/pulseaudio.exe
E: [(null)] pulsecore/core-util.c: Failed to stat home directory D:\PROGRA~3\ConEmu\ConEmu\home\User: No such file or directory
Note: A proper solution would somehow ensure, that Windows Environment Variable HOME is not set when launching WSL, if HOME wasn't set before launching wslbridge.
However, I think, that the behavior of the proposed solution is in most situations not problematic: If HOME was already set before launching wslbridge, then it will afterwords still point to the same location. (See point 1. in http://www.cygwin.com/faq.html#faq.setup.home)
If it wasn't set before, it will with this solution at least point to a reasonable path...