我想知道是否有一种简单的方法来扩展Git命令。
所以我可以创建如下命令:
git my-custom-made-extension --my-options <my-other-arguments>
在一个完美的世界里,我能够用它让我高兴的任何语言都能做到这一点,并且我能够相当容易地将我定制的扩展添加到任何开发环境中。
让我们说,像Vim中plugins的支持?
答案 0 :(得分:28)
正如您在execv_dashed_external
中看到的in the source code,如果您发出命令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-
开头。
答案 1 :(得分:13)
环顾四周,有很多项目扩展了Git命令行:
git-wtf
(用Ruby编写)使用brew或手动安装将可执行文件放入/usr/bin
(或者/usr/local
?)。似乎Git有一种机制,它知道当你编写git wtf
时,它实际上是在寻找名为git-wtf
的PATH中的任何脚本。git-annex
(用haskell编写)有更复杂的味道。但即使它使用Cabal进行安装(并且如果没有它也有很长的依赖关系列表),它似乎使用与git-wtf相同的基本原理。 (当你编写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
可以解决问题,但即使这样,你也必须自己编写安装脚本。
答案 2 :(得分:1)
您可能想要手动或使用git config
创建别名。 man page详细介绍了这一点。一个非常基本的例子是:
git config --global alias.log1 "log --oneline"