wslbridge
wslbridge copied to clipboard
Git for Windows can't find %UserProfile%\.gitconfig when running through wslbridge
Originally opened as a ConEmu issue here https://github.com/Maximus5/ConEmu/issues/1654
Versions
ConEmu build: 180626 x64 (portable) OS version: Windows 10 Pro Build 17134 x64 Used shell version: wslbridge + zsh
Problem description
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.
Steps to reproduce
- Install Git for Windows and add to path
- place .gitconfig in %UserProfile%\.gitconfig
- wslbridge task:
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pnm:/mnt -t zsh
- run
git.exe config --global --list
Actual results
fatal: unable to read config file 'C:/Program Files/ConEmu/App/ConEmu/ConEmu/home/budi/.gitconfig': No such file or directory
Expected results
user.name=nickbudi
(prints rest of .gitconfig...)
Same issue here.
Same problem here too. is there any why to set the Home drive to other location where we have our .gitConfig file saved ?
@nickbudi, @gmanche, @aravindnadumane have you found any decision yet?
I can't using vscode git due to this
Hi @SoleSensei, I'm finally using only Ubuntu Git version in WSLBridge, and with it's own .gitconfig file (making a symlink on those of Git for Windows may works, not using specific tools (merge, diff, etc) Hope this helps
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.
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.
Solution
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.
Test
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
TLDR - Solution in ConEmu:
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
@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.