24

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

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

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

在一个完美的世界里,我可以用任何我喜欢的语言来完成它,并且我可以很容易地将我的定制扩展添加到任何开发环境中。

比方说,像Vim中对插件的支持?

4

3 回答 3

33

正如您在源代码中看到的那样execv_dashed_external,如果您发出命令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-.

于 2012-06-11T10:21:39.260 回答
13

现实生活中的例子

环顾四周,有很多扩展 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会成功,但即便如此,您也必须自己编写安装脚本。

于 2012-06-11T10:19:50.647 回答
1

您可能想要手动或使用git config. 手册页详细介绍了这一点。一个非常基本的例子是这样的:

git config --global alias.log1 "log --oneline"
于 2012-06-11T15:21:46.400 回答