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 条评论。