别人家的孩子
以下故事,纯属虚构,如有雷同,绝不可能!
git 是一个思维敏捷做事可靠的好管家,什么事交给他都很放心,文件再也不用担心丢失了,还得记住文件内容的更改变化.
可惜的是,git 是别人家的孩子,windows 看到 git 在隔壁 linux 家玩的那么欢快,自然有些嫉妒.
越来越多的小伙伴开始纷纷向 windows 老大抱怨,git for windows 终于看不下去了,说既然群众呼声这么高,那我带个头将 git 挖过来吧!
然而水土不服的git并不能适应windows环境,想和操作系统说我要喝水?操作系统桌面不是有个图标吗,自己拿鼠标点点啊!
git 于是哭了,习惯了命令行发送指令,哪里会鼠标操作?要知道在 linux 家的时候,连桌面长啥样几乎都不知道,每天就在终端中呼来喝去,自由自在的.
现在想喝水都喝不上,再这下去非得渴死不可!
git for windows 领头人自然是不会允许这种情况发生的,于是乎决定为 git 量身定做一个私人环境,同时也要照顾 windows 小伙伴的使用习惯,因此找来了大名鼎鼎的 WSL 来商量对策.
WSL 可是大名鼎鼎的人物,见多识广专业对口,人家可是这方面的专家呢!
哦,对了,虽然行内人都听说过 WSL ,但这并不意味着 WSL 街知巷闻啊,还是简单介绍一下 WSL 吧!
WSL 是 Windows Subsystem For Linux 的缩写,"为了 Linux 的 Windows 子系统".听起来有些难以理解,其实并不难理解.
历史上,有很多前辈也曾想要将 linux 上出色的人才招揽到 Windows 旗下,但是这种属于挖墙脚的行为,势必要付出些许代价的,不仅要好吃好喝供应着,还得给他们能熟悉新朋友.
像 git 这种连喝水都喝不上,还怎么愉快玩耍?
经过 WSL 的彻底长谈,Git for Windows 收获不少,不仅找到了组织还认识了 GNU 圈内的 MSYS2, MinGW 等多位伙伴.
醍醐灌顶,瞬间来了灵感,在 MSYS2 和 MinGW 两位小伙伴的帮助下终于为 git 搭建了私人小窝,并且还给它提供了熟悉的命令行,当然也没有忘记windows小伙伴的图形化工具.
忙了这么长时间,终于可以松口气了,这下git不会再渴着了,欢迎来到windows大家庭.
开门见山
git 的小窝并不是真实环境,毕竟是模拟出来的环境,日常活动足够了,但是想要一些高级功能却傻眼了!
git bash 是 Windows 用户安装 git 时默认安装的命令行工具,不仅界面漂亮功能也不错,大多数情况下可以替代 Windows 原生的 cmd 命令行.
然而,git bash 命令行不是万金油,并不能完全替代 cmd ,详情请参考 mintty 官网的相关说明.
mintty is not a full replacement for the Windows Console window
git bash 命令行默认使用 mintty 作为终端模拟器,而 mintty 官宣表示自己不能完全替代 cmd,也就是说 git bash 可能不具备某些 cmd 命令.
举个简单的例子,如果想要查看当前目录的文件结构,最好是以目录树的形式展现,聪明的你获取已经猜到了tree 命令.
git bash 命令行中输入 tree 命令发现并无此命令.
snowdreams1006@home MINGW64 /g/sublime/test$ treebash: tree: command not found
为了验证,确实没有 tree 命令,我们直接打开 git bash 支持的命令文件目录,查看到底有没有 tree.exe 文件.
在 git bash 桌面快捷方式右键,选择打开文件位置,当前正处于 git 的安装目录,进入.\usr\bin 文件夹.
经过验证,git bash 支持的命令文件确实没有发现 tree.exe 文件,因此真的不支持 tree 命令.
然而,cmd 自带的命令行中输入 tree 中竟然发现能够输出目录树,原来 cmd 支持 tree 命令.
G:\sublime\test>tree卷 工作 的文件夹 PATH 列表卷序列号为 00000081 CC3C:50D0G:.├─cmd└─git
tree 命令其实调用的是 tree.com 并不是常见的 tree.exe 格式.
科普时间
现在我们已经知道 git bash 提供的终端模拟器不支持某些 linux 命令,但是为什么不支持以及如何才能支持这些命令呢?
这些问题必须等我们弄清楚 mintty 的朋友圈关系才能更好地解决上述问题,接下来简单科普下 mintty 的朋友圈.
关于科普知识的来源,请参考上一篇文章: <<git bash 背后的朋友圈>>
mintty 是什么
Mintty 是 Cygwin,MSYS 或 Msys2 的终端模拟器,派生项目和 WSL.
mintty 开源终端模拟器,基于 putty 的终端仿真和 Windows 前端页面.
mintty 作为一款优秀的终端模拟器,不仅是其他系统上默认的终端,也是 git bash 的默认终端.
$ mintty --helpUsage: mintty [OPTION]... [ PROGRAM [ARG]... | - ]Start a new terminal session running the specified program or the user's shell.If a dash is given instead of a program, invoke the shell as a login shell.Options: -c, --config FILE Load specified config file -e, --exec Treat remaining arguments as the command to execute -h, --hold never|start|error|always Keep window open after command finishes -i, --icon FILE[,IX] Load window icon from file, optionally with index -l, --log FILE|- Log output to file or stdout -o, --option OPT=VAL Override config file option with given value -p, --position X,Y Open window at specified coordinates -s, --size COLS,ROWS Set screen size in characters -t, --title TITLE Set window title (default: the invoked command) -u, --utmp Create a utmp entry -w, --window normal|min|max|full|hide Set initial window state --class CLASS Set window class name (default: mintty) -H, --help Display help and exit -V, --version Print version information and exit
如果想要自定义 mintty 终端,在 git bash 命令行界面右键选择选项设置即可打开设置页面.
mingw 是什么
mingw 是 Minimalist GNU for Windows 的缩写,是 Microsoft Windows 应用程序的极简主义开发环境.
msys 是什么
MSYS 是 Minimal SYStem 的缩写,是 Bourne Shell 命令行解释器系统.作为 Microsoft 的 cmd.exe 的替代品,它提供了一个通用的命令行环境,特别适合与 MinGW 一起使用,用于将许多开源应用程序移植到 MS-Windows平台; 它是 Cygwin-1.3 的轻量级分支,它包含一小部分 Unix 工具,可以帮助实现这一目标.
cygwin 是什么
大量 GNU 和开源工具,提供类似于 Windows 上的 Linux 发行版的功能.
gnu 是什么
GNU 是 GNU's Not Unix 的递归缩写,是自由软件操作系统.
朋友圈关系梳理
git bash 采用 mintty 作为终端模拟器,而 mintty 终端是 mingw ,msys2 和 cygwin的默认终端,这些"操作系统"或多或少都是 GNU 的一部分.
GNU 是自由软件运动的成果,提出自由软件以及自由软件操作系统概念,源码开源发布.
正因如此,江山代有才人出,前人栽树后人乘凉,Cygwin 作为 GNU 一员,提出了要在 Windows 打造出 Linux 的感觉,开发出一套完整的解决方案.
或许由于这套方案太完整,功能齐全因而软件包体积庞大,因此 MinGW 和 MSYS 分别在其基于上进行精简重构,保留最简功能,发展出"极简主义的GNU".
开源的力量是可持续的,慢慢的,这些操作系统的内置终端功能也被单独提取出来,mintty 作为他们的默认终端也逐渐独立提供终端模拟器服务,轻松和各个系统进行安装集成.
说到开源,自然是少不了 git 的身影,分布式版本控制系统这种优秀工具应该造福全人类,然而 git 本身仅支持类 Unix 系统,并不提供 WIndows 系统的支持.
Git For Windows 组织出手增加了 git 对 Windows 系统的支持,背后的技术多半离不开上述介绍的 GNU 操作系统.
Git Bash Here 则是 Git For Windows 的命令行工具,使用的终端模拟器就是明星模拟器 mintty.
装备升级中
git 自从搬到 windows系统后,日子过得还是开心快乐,见到自己这么受大家环境,虽然心里有些遗憾,总体来说还是很开心的.
话说当初为了让 git 快速融入 windows 大家庭,git for windows 就简化了 git 的居住小窝,很多高级功能或者说可扩展的技能都没有了.
比如最近就有 windows 用户发现,git bash 竟然不支持 tree 命令?
此呼声一出,议论纷纷,甚至有不少用户居然又去用 cmd 了?这让 git bash 怎能不伤心?
为了不让更多潜在用户流失,git 必须背水一战,先解决掉 tree 命令,再研究下如何支持更多命令.
由于篇幅有限,请参考下一节<git bash 如何扩展支持tree命令>