我想知道是否有一种简单的方法来扩展 Git 命令。
所以我可以创建如下命令:
git my-custom-made-extension --my-options <my-other-arguments>
在一个完美的世界里,我可以用任何我喜欢的语言来完成它,并且我可以很容易地将我的定制扩展添加到任何开发环境中。
比方说,像Vim中对插件的支持?
正如您在源代码中看到的那样execv_dashed_external
,如果您发出命令git-my-custom-made-extension
,那么 git 将使用别名:
git my-custom-made-extension ...
→git-my-custom-made-extension ...
git help my-custom-made-extension
→man git-my-custom-made-extension
“扩展 git”没有什么特别之处。只需像往常一样构建一个程序,并确保名称以git-
.
环顾四周,有很多扩展 Git 命令行的项目:
git-wtf
(用 Ruby 编写)使用 brew 或手动安装将可执行文件放入/usr/bin
(或者是/usr/local
吗?)。并且似乎 Git 有一种机制,它知道当你编写git wtf
它时,它实际上是在寻找 PATH 中名为git-wtf
.git-annex
(用haskell写的)有更复杂的味道。但即使它使用 Cabal 进行安装(如果你没有它,它有很长的依赖项列表),它似乎使用与 git-wtf 相同的基本原理。(Git 会在您编写时在可执行路径中找到它git annex
)git-flow
(用 shell 编写)使用 brew/macport/apt-get/wget+bash 自行安装。而且,它似乎再次使用了相同的机制。因此,当然可以编写自己的自定义脚本,然后通过将其放置在 PATH 变量中列出的任何路径中来使其可用。
但据我所知,有一些缺点......
您并没有真正扩展 Git,因此某些命令不起作用:
$ git help wtf
No manual entry for git-wtf
$ git wtf --help
No manual entry for git-wtf
$ git wtf -h # the only command which works...
Usage: git wtf [branch+] [options]
...
我没有在 git-annex 上尝试过,所以他们可能已经解决了这个问题,但是 git-flow 和 git-wtf 遵循这种行为。
编辑:git help
回退到手册页,所以这一点有点不相关(Thx Eric)。
Brew、macports 和 apt-get 的安装非常棒。但是没有全球公认的向 Git 添加功能的方式。更具体地说,您没有安装“插件”的平台独立方式。也许make
会成功,但即便如此,您也必须自己编写安装脚本。
您可能想要手动或使用git config
. 手册页详细介绍了这一点。一个非常基本的例子是这样的:
git config --global alias.log1 "log --oneline"