体验新欢之美
babun
看起来像是我们真的运行在 linux
系统一样,那么流畅顺滑,是一款遇上再也不会错过的 WindowsShell
.
# tree 命令 babun 有 {~}» tree ~ . ├── a ├── bin ->/home/vm-win7/.local/bin └── will 1 directory,2 files # wget 命令 babun 也有 {~}» wget www.baidu.com ~ --2019-05-2414:33:01-- http://www.baidu.com/ Resolving www.baidu.com (www.baidu.com)...115.239.211.112,115.239.210.27 Connecting to www.baidu.com (www.baidu.com)|115.239.211.112|:80... connected. HTTP request sent, awaiting response...302Found Location: https://www.baidu.com/[following] --2019-05-2414:33:02-- https://www.baidu.com/ Connecting to www.baidu.com (www.baidu.com)|115.239.211.112|:443... connected. HTTP request sent, awaiting response...200 OK Length: unspecified [text/html] Saving to:‘index.html’ index.html [<=>]152.70K--.-KB/s in0.05s 2019-05-2414:33:02(2.98 MB/s)-‘index.html’ saved [156365]
不论是
tree
命令还是wget
命令,babun
默认全部集成,这下真的要彻底替代cmd
了呢!
但是,不知道你是否注意到在推荐 babun
时,我们曾经说过 babun
和 git bash
不仅是亲戚而且还是近亲.
这句话又从何谈起?
首先, babun
是基于 Cygwin
, git bash
或者说 gitforwindows
也是基于 Cygwin
,两者一脉相承. 再者, babun
支持 shell
和 zsh
两种 shell
,而 gitforwindows
仅支持 bash
. 还有, babun
和 gitforwindows
的默认终端都是 mintty
模拟器.
最后一点是差异性比较大的, babun
是直接基于 Cygwin
而 gitforwindows
则是间接基于 Cygwin
,两者确实存在一定的差异性!
再问最后一个问题,我们为什么要使用 Cygwin
而抛弃 git bash
?
那是因为 git bash
默认提供的命令有限却又没有提供相应的包管理工具,导致我们无法自定义扩展更多命令.
所以,我们何不试一试 babun
的包管理工具呢?
- 包管理工具帮助文档
1. {~}» pact --help ~ 2. pact:Installs and removes Cygwin packages. 3. Usage: 4. "pact install <package names>" to install given packages 5. "pact remove <package names>" to remove given packages 6. "pact update <package names>" to update given packages 7. "pact show" to show installed packages 8. "pact find <patterns>" to find packages matching patterns 9. "pact describe <patterns>" to describe packages matching patterns 10. "pact packageof <commands or files>" to locate parent packages 11. "pact invalidate" to invalidate pact caches (setup.ini, etc.) 12. Options: 13. --mirror,-m <url>:set mirror 14. --invalidate,-i : invalidates pact caches (setup.ini, etc.) 15. --force,-f : force the execution 16. --help 17. --version • 安装第三方命令 18. {~}» pact install arj ~2 19. Working directory is /setup 20. Mirror is http://mirrors.kernel.org/sourceware/cygwin/ 21. --2019-05-2414:26:46-- http://mirrors.kernel.org/sourceware/cygwin//x86/setup.bz2 22. Resolving mirrors.kernel.org (mirrors.kernel.org)...198.145.21.9,2001:19d0:306:6:0:1994:3:14 23. Connecting to mirrors.kernel.org (mirrors.kernel.org)|198.145.21.9|:80... connected. 24. HTTP request sent, awaiting response...200 OK 25. Length:3893609(3.7M)[application/x-bzip2] 26. Saving to:‘setup.bz2’ 27. setup.bz2 100%[====================================>]3.71M5.89KB/s in4m5s 28. 2019-05-2414:30:51(15.5 KB/s)-‘setup.bz2’ saved [3893609/3893609] 29. Updated setup.ini 30. Installing arj 31. Found package arj 32. --2019-05-2414:30:52-- http://mirrors.kernel.org/sourceware/cygwin//x86/release/arj/arj-3.10.22-3.tar.xz 33. Resolving mirrors.kernel.org (mirrors.kernel.org)...198.145.21.9,2001:19d0:306:6:0:1994:3:14 34. Connecting to mirrors.kernel.org (mirrors.kernel.org)|198.145.21.9|:80... connected. 35. HTTP request sent, awaiting response...200 OK 36. Length:134244(131K)[application/x-xz] 37. Saving to:‘arj-3.10.22-3.tar.xz’ 38. arj-3.10.22-3.tar.xz 100%[====================================>]131.10K5.02KB/s in17s 39. 2019-05-2414:31:10(7.61 KB/s)-‘arj-3.10.22-3.tar.xz’ saved [134244/134244] 40. Unpacking... 41. Package arj requires the following packages, installing: 42. cygwin 43. Package cygwin is already installed, skipping 44. Package arj installed • 卸载第三方命令 45. {~}» pact remove arj ~ 46. Removing arj 47. Package arj removed
babun
在手,linux
我有!妈妈再也不用担心我的WindowsShell
不好用了!
忠贞不二,开发扩展
方案一让我们另寻新欢,方案二让我们坚持己见,面对问题不逃避而是想办法解决.
再一次回忆一下需要解决的问题: git bash
命令行默认没有提供包管理工具以至于我们只能使用已集成的命令,所以不支持自定义扩展命令.
解铃还须系铃人
git bash
是 git
的命令行工具,而 git
原来仅仅支持 linux
系统,后来又支持了 windows
,值得注意的是,这种所谓的支持并不是原生支持,而是变相支持.
如果你打开 git
的官网 https://git-scm.com/download,你会发现 git
也是跨平台的呢,竟然支持 mac
, windows
和 linux
三大主流操作系统!
然而,真相却不是这样的, windows
平台的 git
其实不是真正的 git
,或者说 windows
和另外两个并不是一家人.
首先看一下 MacOS X
的下载页面介绍,请注意源码地址: https://github.com/git/git/
源码托管于 github
,是 git
组织下面的 git
项目,其项目地址是 https://github.com/git/git/
接下来我们再看一下 LinuxandUnix
的下载页面,虽然下载页面推荐我们使用包管理工具进行安装,但仍然给我提供了源码地址: https://www.kernel.org/pub/software/scm/git/
虽然源码下载地址不是 github
,但是我们却可以从项目地址中窥见一斑,仍然属于 scm/git/
项目,也是亲儿子.
如果 mac
和 linux
是 git
原生支持的亲儿子,那么 windows
则是变相支持的干儿子.
windows
和 mac
一样,源码同样托管在 github
,但是地址却不一样!项目地址: https://github.com/git-for-windows/git
这下局面瞬间清楚了, gitforwindows
并不是 git
原生支持的 windows
版本,或者说 windows
系统的 git
是另外一个团队开发的,这个开发团队就是 gitforwindows
.
何不试试开发版
Git SCM for Windows官网提供两种版本,一个就是平时使用的发布版本,另一个就是开发版本.
既然发布版本没有提供包管理工具,自然我们只能寻求开发版本的帮助.
- 跳转到开发版本的下载地址 https://github.com/git-for-windows/build-extra/releases/tag/git-sdk-1.0.7,下载适合自己系统的版本.
- 双击
git-sdk-installer-1.0.7-64.7z.exe
进行自动安装,安装时间相当长,没有一两个小时也得有小上午时间,安装期间可以接着做其他事情. - 安装完毕后可以进行自我测试,验证开发板是否比发布版更大更强.
小试牛刀,应有尽有, tree
和 wget
等命令全都有!
千呼万唤始出来
gitforwindows
主要是由 msys2
和 mingw
等众多组件二次开发而来的 windows
版本的 git
.
msys2
和 mingw
都是一种在 windows
系统上打造 linux
运行体验的解决方案,其中 msys2
是在 msys
基础上重构开发的项目,而 msys2
项目默认提供有包管理工具 Pacman
.
因此, gitforwindows
也可以使用 Pacman
包管理工具进行依赖安装.
如需查看官方解释请查看 : https://github.com/git-for-windows/build-extra
- 什么是包管理工具
现代软件开发需要一种管理依赖关系的方式,即跟踪所需的软件库及其版本.
例如,适用于
Linux
的apt-get
或者yum
,适用于MacOSX
的homebrew
,适用于windows
的某些第三方工具.
GitforWindows
基于 MSYS2
,它捆绑了 ArchLinux
的 Pacman
工具,因此接下来我们的包管理工具就是 Pacman
.
- 如何使用包管理工具
如需在命令行中查看帮助文档,支持 manPacman
和 Pacman--help
两种方式.
$ Pacman--help 用法:Pacman<操作>[...] 操作: Pacman{-h --help} Pacman{-V --version} Pacman{-D --database}<选项><软件包> Pacman{-F --files}[选项][软件包] Pacman{-Q --query}[选项][软件包] Pacman{-R --remove}[选项]<软件包> Pacman{-S --sync}[选项][软件包] Pacman{-T --deptest}[选项][软件包] Pacman{-U --upgrade}[选项]<文件> 使用'Pacman {-h --help}'及某个操作以查看可用选
安装第三方包
# 下载默认版本 pacman -S <package-name> # 下载最新版本 pacman -Sy<package-name>
- 升级第三方包
# 升级到最新版本 pacman -Syu<package-name> # 全部升级到最新版本 pacman -Syu
- 删除第三方包
# 删除第三方包 pacman -R <package-name>
- 列出第三方包
# 列出已安装的第三方包 pacman -Q # 列出第三方包的内容 pacman -Ql<package-name> # 查明文件属于哪一个包 pacman -Qo<file-name>
轻松扩展 git bash
总结
git bash
作为 windows
电脑上使用的 git
命令行工具,确实很方便,不仅支持 git
命令还支持常见的基本命令.
但 git bash
命令行并不能完全替代 cmd
,是因为 windows
系统版本的 git
并不是真正的 git
,而是由 gitforwindows
组织进行移植开发的特供版.
gitforwindows
项目借鉴了 msys2
和 mingw
等项目,旨在于打造类似于 linux
的运行环境,以便 git
所需的脚本命令能够正常运行.
同时为了 git
服务的精简, gitforwindows
的发布版移除了很多不必要的开发组件,其中就包括 msys2
的包管理工具 Pacman
.
所以,平时使用的 git bash
由于没有包安装工具,所以不能轻松扩展更多命令,如果想要扩展更多命令,这里提供了两种思路.
一种思路是直接放弃,寻找新的替代方案,推荐的替代方案是 babun
,因为 babun
和 gitforwindows
血缘相近!
另一种思路就是源码开发,不论是直接在源码工具运行还是再次打包重新编译成发布版都可以扩展更多自定义命令,不过开发版的要求更高,需要了解 msys2
和 mingw
等诸多概念,这里就不再赘述了.
实际使用 git
的过程中,如果真的遇到了需要扩展更多命令的情况,请参考方法一,方法二和方法三依次尝试,因为难度系数逐步加大,找到适合自己的解决方案才是好方案.
最后,感谢大家的阅读,如果觉得本文对你有所帮助或者你有别的想法,欢迎留言评论告诉我,谢谢!
本文作者:雪之梦技术驿站,你在互联网的路上匆匆而来,雪之梦技术驿站助你满载而去。
声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。