扩展Git功能

时间:2012-06-11 10:19:50

标签: git

我想知道是否有一种简单的方法来扩展Git命令。

所以我可以创建如下命令:

git my-custom-made-extension --my-options <my-other-arguments>

在一个完美的世界里,我能够用它让我高兴的任何语言都能做到这一点,并且我能够相当容易地将我定制的扩展添加到任何开发环境中。

让我们说,像Vim中plugins的支持?

3 个答案:

答案 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-extensionman 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会在可执行文件路径中找到它
  • 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"