在 Visual Studio Code 中使用 Cygwin Git

注意:可能已经失效,等我什么时候再用上这东西了就更新

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。

《在 Visual Studio Code 中使用 Cygwin Git》上有1条评论

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据