Thanks and credit to mattn and ferreus on GitHub.
Also check out Developing on WSL and/or wslpath (Windows 10 Build 17046 or later) if you're using the Windows Subsystem for Linux.
| #!/bin/bash | |
| # wrapper to convert linux paths to windows | |
| # so vscode will work as a git editor with cygwin | |
| # editor="/home/this/file.sh" in .gitconfig | |
| # extract last argument (the file path) | |
| for last; do true; done | |
| # get all the initial command arguments | |
| all="${@:1:$(($#-1))}" | |
| # launch editor with windows path | |
| code $all $(cygpath -w $last) |
| @echo off | |
| REM wrapper to convert linux paths to windows | |
| REM so vscode git integration will work with cygwin | |
| REM "git.path"="C:\\this\\file.bat" in settings.json | |
| setlocal | |
| set PATH=C:\cygwin\bin;%PATH% | |
| if "%1" equ "rev-parse" goto rev_parse | |
| git %* | |
| goto :eof | |
| :rev_parse | |
| for /f %%1 in ('git %*') do cygpath -w %%1 |
I tried the bat wrapper, it worked for basic git status display, but trying to stage/unstage a file resulted in errors.
I.e. either of these commands issued by VS Code failed:
Stage:
git add -A -- C:\project\hxcalc\package.jsonUnstage:
git reset -q HEAD -- C:\project\hxcalc\package.jsonBoth of them result result in
fatal: C:\project\hxcalc\package.json: 'C:\project\hxcalc\package.json' is outside repository at '/mnt/c/project/hxcalc'I tried the same commands in Cygwin bash, and indeed, Cygwin git doesn't seem to be able to handle Windows paths.
What worked for me is this: github.com/nukata/cyg-git. It's a tiny C wrapper that you compile with gcc (for my use case, regular Cygwin gcc worked), and a Zsh wrapper script that works similar to
cygpath-git-vscode.bat, but it also takes care of converting paths passed to git. I had to make a small change to this script to make it handlerev-parsecommands that produce multiple lines of output (made a PR to the original repo).