Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Git for Windows can't find %UserProfile%\.gitconfig when running through wslbridge #32

Open
nickbudi opened this issue Jul 24, 2018 · 7 comments

Comments

@nickbudi
Copy link

Originally opened as a ConEmu issue here Maximus5/ConEmu#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

  1. Install Git for Windows and add to path
  2. place .gitconfig in %UserProfile%\.gitconfig
  3. wslbridge task:
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pnm:/mnt -t zsh
  1. 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...)
@gmanche
Copy link

gmanche commented Aug 6, 2018

Same issue here.

@aravindnadumane
Copy link

Same problem here too. is there any why to set the Home drive to other location where we have our .gitConfig file saved ?

@solesensei
Copy link

@nickbudi, @gmanche, @aravindnadumane have you found any decision yet?

I can't using vscode git due to this

@gmanche
Copy link

gmanche commented Jan 6, 2019

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

@zviryatko
Copy link

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.

@TSlivede
Copy link

TSlivede commented Jan 18, 2020

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

@TSlivede
Copy link

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants