三招教你轻松扩展 git bash 命令(中)(一)

简介: 在上一篇文章中我们介绍了第一种方式实现轻松扩展 GitBash 命令,首先简单回顾一下主要知识.GitBash 命令行工具是 Windows 电脑安装 Git 时默认集成的终端工具,与此同时还有双胞胎兄弟 GitGUI 图形化工具.

前情回顾

上一篇文章中我们介绍了第一种方式实现轻松扩展 GitBash 命令,首先简单回顾一下主要知识.

GitBash 命令行工具是 Windows 电脑安装 Git 时默认集成的终端工具,与此同时还有双胞胎兄弟 GitGUI 图形化工具.


66.jpg

GitBash 是终端工具,而 Windows 系统默认也有个 cmd 终端工具,这两个命令行其实都可以运行 Git 相关命令,二者在这方面差异不大,使用哪一个都可以.

但是如果你更熟悉 linux 命令行语法的话,那么肯定建议选择 GitBash 命令行而不能是 cmd 命令行.

因为 windows 命令行语法和 linux 命令行语法差异还是比较大的.

当然, GitBashcmd 作为同类产品,两者并不是互斥的,而应该是互补产品,某些情况下, GitBash 可能还需要调用 cmd 才能完成相应任务呢!

比如说 GitBash 默认没有 tree 命令,而 cmd 命令行却又,所以我们可以在 GitBash 中调用 cmd 帮我们执行 tree 命令.


67.jpg

GitBash 调用 cmd 程序执行相关命令时,请一定要以 winpty 开头,不然可能会发生意想不到的结果.

问题背景

上一篇文章结尾处,我们留下了一个问题,那就是: 如果 cmd 也没有某些命令的话, GitBash 又该如何执行该命令?

正所谓"巧妇难为无米之炊", GitBash 命令行没有 wget 命令, cmd 命令行也没有 wget 命令,因此 GitBash 自然无法调用 wget 命令,那么解决思路就很清楚了:

扩展 wget 命令并让 GitBash 识别到 wget 命令文件呗!


68.png

还记得上篇文章GitBash 想要调用 cmdtree 命令,并不能直接 winpty tree 而是 winpty tree.com .

Administrator@snowdreams1006 MINGW64 /f/workspace/test
# 直接输入 ` tree` 命令会提示找不到该命令文件
$ tree
bash: /usr/bin/tree: No such file or directory
Administrator@snowdreams1006 MINGW64 /f/workspace/test
# 输入 `tree.com` 命令则能调用该命令但会出现中文乱码
$ tree.com
▒▒ ▒▒▒▒ ▒▒▒ļ▒▒▒ PATH ▒б▒
▒▒▒▒▒к▒Ϊ 62AE-62CA
F:.
▒▒▒▒cmd
▒▒▒▒git-bash
Administrator@snowdreams1006 MINGW64 /f/workspace/test
# 直接输入 `winpty tree` 命令依旧找不到该命令
$ winpty tree
winpty: error: cannot start 'tree': Not found in PATH
Administrator@snowdreams1006 MINGW64 /f/workspace/test
# 输入 `winpty tree.com` 命令则正常调用该命令
$ winpty tree.com
卷 常用 的文件夹 PATH 列表
卷序列号为 62AE-62CA
F:.
├─cmd
└─git-bash

从上述的例子中,我们不难总结出以下结论:

  • GitBash 无法识别 .com 后缀结尾的命令文件.
  • GitBash 调用 cmd 命令时应通过 winpty 包装器.
  • GitBash 查找命令文件的路径也是通过 PATH 环境变量设置的,只不过还有自己的命令文件路径.

探寻庐山真面目

GitBash 命令行语法不仅和 linux 语法一致,而且设计思想基本也差不多,我们知道在 linux 中有一句话可以概括整个系统核心: 一切皆文件

那么 GitBash 所支持的各种命令自然也是文件,只要找到了命令文件自然也就明白为什么不支持 tree 命令了,换句话说,下一步我们就知道如何才能支持 tree 命令.

在桌面上找到 GitBash 图标的快捷方式,选中该图标右键,然后选择打开文件位置,现在应该进入到 Git 的安装目录了.


69.jpg

接下来,进入 usr/bin 目录,你会发现所有可执行的命令文件,但是并找不到 tree.exe 文件,所以自然无法执行 tree 命令.


70.jpg


那么如果我们能够找到 tree.exe 文件并将该命令文件放到 usr/bin 目录下自然就能够正常调用 tree 命令了,但是我们又该去哪里找 tree.exe 文件呢?

轻松扩展 git bash 命令(中)

tree.exe 命令文件千千万,但是适合 GitBash 命令行运行的却并不是全部文件.

想要对症下药,自然要先弄清楚 GitBash 到底属于何门何派,应用了哪些技术栈,这样才能知己知彼,轻松扩展更多命令.

Git 原来是 linux 系统专属软件,后来由 GitforWindows 组织进行了移植,所以现在 Git 才能够支持 Windows系统.

GitforWindows 在移植 Git 的过程中借鉴了大量的开源项目,包括 minGWmsys2 项目.



71.png


不查不知道,一查就发现了新大陆,原来想要把 linux 软件移植到 windows 平台的做法并不孤单,甚至提出了 WSL 概念!

WSL : WindowsSubsystemForLinux 的缩写,即为 linux 打造的 windows 子系统,可以简单理解为在 windows系统上获得 linux 系统的体验.

所以, GitBash 背后的技术支持来源于 minGWmsys2WSL 项目.

既然, GitBash 默认没有提供 tree 命令文件,那我们就自己动手去扩展 tree 命令.

由于暂时没有找到 minGW 已编译好的可执行文件,所以只能找其他 WSL 项目进行移植,亲测可行!

GnuWin 项目源码托管地址,其中 GnuWin64 是 64 位操作系统, GnuWin32 是 32 位操作系统,不过 GnuWin64 仍在开发计划中,所以我们只能使用 GnuWin32 .

GnuWin64 : https://sourceforge.net/projects/gnuwin64/

GnuWin32 : https://sourceforge.net/projects/gnuwin32/



72.jpg


依次选择 Files>tree>1.5.2.2 便可以找到 tree 命令文件,这里提供了各种文件类型,既有源码文件又要安装文件,还有可执行的二进制文件.

73.jpg

tree-1.5.2.2-bin.zip 下载地址: https://sourceforge.net/projects/gnuwin32/files/tree/1.5.2.2/tree-1.5.2.2-bin.zip/download

二进制文件

接下来的事情就比较简单了,将二进制文件 tree-1.5.2.2-bin.zip 解压,找到 tree.exe 文件并复制到 Git的安装目录下面的 usr/bin 目录中即可支持 tree 命令.

Administrator@snowdreams1006 MINGW64 /f/Downloads/tree-1.5.2.2-bin
# 解压 `tree-1.5.2.2-bin.zip` 文件,查看文件目录,`tree.exe` 位于 `bin` 目录下.
$ winpty tree.com
卷 常用 的文件夹 PATH 列表
卷序列号为 62AE-62CA
F:.
├─bin
├─contrib
│ └─tree
│ └─1.5.2.2
│ ├─tree-1.5.2.2
│ └─tree-1.5.2.2-src
├─man
│ └─cat1
└─manifest


74.jpg

现在再次测试 tree 命令来一起见证奇迹吧!

Administrator@snowdreams1006 MINGW64 /f/Downloads/tree-1.5.2.2-bin
# `tree` 命令等价于 `tree.exe` 命令,执行的正是我们刚刚扩展的 `tree-1.5.2.2-bin.zip` 二进制文件
$ tree
.
├── bin
│   └── tree.exe
├── contrib
│   └── tree
│   └── 1.5.2.2
│   ├── tree-1.5.2.2
│   ├── tree-1.5.2.2-GnuWin32.README
│   └── tree-1.5.2.2-src
│   ├── CHANGES
│   ├── INSTALL
│   ├── LICENSE
│   └── README
├── man
│   └── cat1
│   └── tree.1.txt
└── manifest
├── tree-1.5.2.2-bin.mft
└── tree-1.5.2.2-bin.ver
9 directories, 9 files

GitBash 扩展的 tree 命令的后缀名是 .exe ,而刚好能够识别,因此不必输入 tree.exe 命令.

相关文章
|
19天前
|
机器学习/深度学习 人工智能 开发工具
《Git 简易速速上手小册》第10章:未来趋势与扩展阅读(2024 最新版)
《Git 简易速速上手小册》第10章:未来趋势与扩展阅读(2024 最新版)
47 3
|
19天前
|
缓存 数据可视化 网络安全
Git命令大全
Git命令大全
66 1
|
19天前
|
开发工具 git
Git教程:深入了解删除分支的命令
【4月更文挑战第3天】
112 0
Git教程:深入了解删除分支的命令
|
19天前
|
存储 Shell Linux
【Shell 命令集合 文件管理】Linux git命令使用教程
【Shell 命令集合 文件管理】Linux git命令使用教程
42 0
|
19天前
|
开发工具 git
git常用命令整理
git常用命令整理
18 0
|
19天前
|
开发工具 git 开发者
Git常用命令大全:让你轻松驾驭版本控制
Git命令速查:`git init`新建仓库,`git clone`克隆,`git add`入暂存区,`git commit -m`提交,`git status`查看状态,`git log`查看历史,`git branch`创建分支,`git checkout`切换,`git merge`合并,`git pull`拉取更新,`git push`推送,`git remote -v`查看远程,`git checkout --`撤销本地修改,`git reset HEAD`取消暂存,`git reset --hard`回退版本。掌握这些,提升代码管理效率!
25 0
|
19天前
|
Shell 网络安全 开发工具
GIT常用命令
GIT常用命令
|
17天前
|
网络安全 开发工具 git
版本管理 git 常用命令
版本管理 git 常用命令
22 1
|
19天前
|
存储 Linux 开发工具
Git 分布式版本控制系统基本概念和操作命令
Git 分布式版本控制系统基本概念和操作命令
126 0
|
19天前
|
算法 Java BI
云效产品使用报错问题之平台上导出的统计数据和 git 中使用命令导出的数据统计都对不上,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。