在cygwin里调用windows原生版git-scm的gitk/git-scm与cygwin协同工作

cygwin作为潜伏在windows里的类unix/linux操作系统,堪称神器,几乎可以运行一切unix工具,甚至连gui版的unix软件也可以用cygwin-X模拟。但是这个X实在太丑陋了,使用也不方便。不过,事实上,我们用cygwin主要是使用grep, cut, vim, git 等这些经典的的unix工具,而不是gui;毕竟gui也不是unix/linux的擅长项。

对于使用git的朋友,应该更依赖cygwin下的命令行版git,自由,快捷,随心所欲。然而要查阅版本历史时,还是gui版的git更直观。

windows原生git-scm自带了git gui/gitk工作,可以在git bash里运行gitk调用,这点与unix/linux的git一致,使用还是比较方便的;但git bash有个硬伤,工具太少,而且shell太傻,完全是windows命令提示符的风格,通过鼠标做选择复制等操作,几乎是脑残得令人无语;比cygwin差了N个星系的距离。

于是:如果能在cygwin直接调用win32下原生的gitk,就完美了。

然而,一直没有找到方法,连万能的google也没帮上忙。经过艰苦卓绝的不懈努力,终于找到了办法,并发现多次尝试错误的原因。

—————– 分隔线,前面基本上都是废话,请忽略 ——————–

假设win32原生git-scm装在 D:Program FilesGit ,那么gitk位于 D:Program FilesGitbingitk 该文件是一个bash风格的脚本,它是由D:Program FilesGitbinwish.exe 所调用执行的。

在windows开始菜单的git子项里,查看“git gui”的属性,会发现它是一个快捷方式,指向 “D:Program FilesGitbinwish.exe” “d:Program FilesGitlibexecgit-coregit-gui”  其中的gui-gui同样也是个bash风格的脚本,由wish调用。

因为cygwin本身支持windows原生的win32程序,执行该wish.exe并带上相应的参数,就可以调用这些bash风格脚本。

原理就是如上这些。我们按照cygwin风格重写这些命令。

在cygwin里,windows盘符挂载到/cygwin/下,形式如/cygwin/c, /cygwin/d … 那么,上述wish.exe 在cygwin里,路径即

/cygdrive/d/Program Files/Git/bin/wish.exe
路径中的空格,要做转义。

后面要带上参数,这个参数要使用windows风格的路径,因为wish.exe是原生的win32程序,它的参数是win32风格的。gtk的脚本即如下

/cygdrive/d/Program Files/Git/bin/wish.exe "D:Program FilesGitbingitk

wish的参数加了双引号,这也是win32风格。可以在cygwin下切换到一个git项目目录里,执行上面的命令测试一下。

以cygwin里创建一个命令别名 gitk 到上面的命令上,如下

$ alias gitk=’/cygdrive/d/Program Files/Git/bin/wish.exe “D:Program FilesGitbingitk”‘

然后执行gitk即可,与原生git-scm的bash环境里执行gitk一样。不过这只能在本次会话中有效,将其放到 ~/.bashrc 里,后面增加如下一行

alias gitk=’/cygdrive/d/Program Files/Git/bin/wish.exe “D:Program FilesGitbingitk”‘

大功告成。

如果需要在cygwin里使用git gui的话,方法类似。

发表评论?

0 条评论。

发表评论