注意:可能已经失效,等我什么时候再用上这东西了就更新
Visual Studio Code 钦定的 Git for Windows 不能更改文件权限(MSYS2 挂载选项 noacl,posix=0
),经过一段时间的多平台 chmod
乱艹后,很可能出现 Git for Windows 提示存在 unstaged changes 而 Cygwin Git 却认为 nothing to commit, working tree clean
的情况。
由于博主主要使用 Cygwin,于是尝试让 Visual Studio Code 使用 Cygwin Git。
但是 Cygwin Git 目前并不受 VSCode 官方支持因为没人测试,所以只能自己想办法一把梭。
经过一段时间的摸索和练习测试,发现 VSCode 使用 Cygwin Git 的主要问题在于 Git for Windows 和 VSCode 使用 Win32 路径(C:\something),而 Cygwin Git 使用 Cygwin 路径(/cygdrive/c/something)。
于是写了一个脚本对观察到的几种使用路径的情况进行转换,应该大概也许解决了问题。
gitwrapper.bat
@C:/cygwin64/bin/bash.exe /usr/bin/gitwrapper.sh "%*"
Code language: DOS .bat (dos)
gitwrapper.sh
#!/bin/bash
PATH="/usr/bin:$PATH"
args=()
for arg in $1
do
if [ "${arg:1:2}" = ':\' ]
then
args+=("$(cygpath -u "$arg")")
elif [[ ${arg:0:4} == :?:\\ ]]
then
args+=(":$($(cygpath -u "${arg:1}"))")
else
args+=("$arg")
fi
done
if [ "${args[0]}" = rev-parse ] && [ "${args[1]}" = "--show-toplevel" ]
then
result="$(git "${args[@]}")"
s="$?"
cygpath -w "$result"
exit "$s"
else
exec git "${args[@]}"
fi
Code language: Bash (bash)
将这两个文件放在 Cygwin 的 bin 目录,并在 VSCode 中设置 "git.path": "C:/cygwin64/bin/gitwrapper.bat"
。
博主只测试了基本的操作,未必能覆盖到所有情况。如果发现未处理的情况,可以在 Gist 或者本文下面评论,并附上 VSCode 中的 Git output。
羡慕蛋疼大佬会逆向,你的联想笔记本程序很好用🎉