三招教你轻松扩展 git bash 命令(下)(二)

简介: 在上一节中我们已经介绍了两种方式来扩展 git bash 命令,解决了一般性命令不足的问题,最后我们还留下了一个疑问,如果两种方式均无法扩展某些命令又该怎么办? 再介绍最后一个大招之前,我们首先来回忆一下前面两种扩展方式.

体验新欢之美

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 时,我们曾经说过 babungit bash 不仅是亲戚而且还是近亲.

这句话又从何谈起?

首先, babun 是基于 Cygwin, git bash 或者说 gitforwindows 也是基于 Cygwin,两者一脉相承. 再者, babun 支持 shellzsh 两种 shell,而 gitforwindows 仅支持 bash. 还有, babungitforwindows 的默认终端都是 mintty 模拟器.

最后一点是差异性比较大的, babun 是直接基于 Cygwingitforwindows 则是间接基于 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 bashgit 的命令行工具,而 git 原来仅仅支持 linux 系统,后来又支持了 windows ,值得注意的是,这种所谓的支持并不是原生支持,而是变相支持.

如果你打开 git 的官网 https://git-scm.com/download,你会发现 git 也是跨平台的呢,竟然支持 mac , windowslinux 三大主流操作系统!

然而,真相却不是这样的, windows 平台的 git 其实不是真正的 git,或者说 windows 和另外两个并不是一家人.

首先看一下 MacOS X 的下载页面介绍,请注意源码地址: https://github.com/git/git/



94.jpg


源码托管于 github,是 git 组织下面的 git 项目,其项目地址是 https://github.com/git/git/


95.jpg


接下来我们再看一下 LinuxandUnix 的下载页面,虽然下载页面推荐我们使用包管理工具进行安装,但仍然给我提供了源码地址: https://www.kernel.org/pub/software/scm/git/


96.jpg


虽然源码下载地址不是 github,但是我们却可以从项目地址中窥见一斑,仍然属于 scm/git/ 项目,也是亲儿子.



97.jpg


如果 maclinuxgit 原生支持的亲儿子,那么 windows 则是变相支持的干儿子.


98.jpg


windowsmac 一样,源码同样托管在 github,但是地址却不一样!项目地址: https://github.com/git-for-windows/git


99.jpg

这下局面瞬间清楚了, 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 进行自动安装,安装时间相当长,没有一两个小时也得有小上午时间,安装期间可以接着做其他事情.


  • 安装完毕后可以进行自我测试,验证开发板是否比发布版更大更强.


100.jpg


小试牛刀,应有尽有, treewget 等命令全都有!

千呼万唤始出来

gitforwindows 主要是由 msys2mingw 等众多组件二次开发而来的 windows 版本的 git.

msys2mingw 都是一种在 windows 系统上打造 linux 运行体验的解决方案,其中 msys2 是在 msys 基础上重构开发的项目,而 msys2 项目默认提供有包管理工具 Pacman.

因此, gitforwindows 也可以使用 Pacman包管理工具进行依赖安装.

如需查看官方解释请查看 : https://github.com/git-for-windows/build-extra

  • 什么是包管理工具

现代软件开发需要一种管理依赖关系的方式,即跟踪所需的软件库及其版本.

例如,适用于 Linuxapt-get 或者 yum,适用于 MacOSXhomebrew,适用于 windows 的某些第三方工具.

GitforWindows 基于 MSYS2,它捆绑了 ArchLinuxPacman 工具,因此接下来我们的包管理工具就是 Pacman.

  • 如何使用包管理工具

如需在命令行中查看帮助文档,支持 manPacmanPacman--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 项目借鉴了 msys2mingw 等项目,旨在于打造类似于 linux 的运行环境,以便 git 所需的脚本命令能够正常运行.

同时为了 git 服务的精简, gitforwindows 的发布版移除了很多不必要的开发组件,其中就包括 msys2 的包管理工具 Pacman.

所以,平时使用的 git bash 由于没有包安装工具,所以不能轻松扩展更多命令,如果想要扩展更多命令,这里提供了两种思路.

一种思路是直接放弃,寻找新的替代方案,推荐的替代方案是 babun ,因为 babungitforwindows 血缘相近!

另一种思路就是源码开发,不论是直接在源码工具运行还是再次打包重新编译成发布版都可以扩展更多自定义命令,不过开发版的要求更高,需要了解 msys2mingw 等诸多概念,这里就不再赘述了.

实际使用 git 的过程中,如果真的遇到了需要扩展更多命令的情况,请参考方法一,方法二和方法三依次尝试,因为难度系数逐步加大,找到适合自己的解决方案才是好方案.

最后,感谢大家的阅读,如果觉得本文对你有所帮助或者你有别的想法,欢迎留言评论告诉我,谢谢!

本文作者:雪之梦技术驿站,你在互联网的路上匆匆而来,雪之梦技术驿站助你满载而去。

声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。


相关文章
|
5天前
|
存储 开发工具 git
|
2月前
|
存储 网络安全 开发工具
【GIT】Git常用命令学习
【GIT】Git常用命令学习
46 1
|
3天前
|
存储 安全 开发工具
掌握这5个Git高级命令,让你的开发效率飞速提升!
掌握这5个Git高级命令,让你的开发效率飞速提升!
|
7天前
|
缓存 Shell 开发工具
Git Bash⭐一、安装软件,与Git Bash基础命令
Git Bash⭐一、安装软件,与Git Bash基础命令
|
8天前
|
开发工具 git
Git常用命令
Git常用命令
21 1
|
1天前
|
存储 Shell
Bash 脚本中的 `hash` 命令
【8月更文挑战第19天】
4 0
|
27天前
|
存储 开发工具 git
git常用命令(干货)
git常用命令(干货)
|
7天前
|
开发工具 git
Git——常用命令总结
Git——常用命令总结
12 0
|
26天前
|
存储 安全 开发工具
Git学习笔记 三个区域、文件状态、分支、常用命令
理解并掌握这些概念和命令,对于有效地使用Git来管理项目源代码是至关重要的。Git的强大功能支持了复杂的开发工作流程,而良好的Git实践能够极大地提高团队的协作效率。随着实践的增多,对于Git更深层次的功能和最佳实践的理解也会随之增长,进一步加强你作为一个软件开发者的能力。
46 0
|
1月前
|
开发工具 git
GIT日常命令收集
这些命令是GIT日常操作中常用的,但GIT的功能远不止这些,更多高级功能需要通过学习和实践来掌握。
22 0