扩展Git功能

Vin*_* B. 21 git

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

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

git my-custom-made-extension --my-options <my-other-arguments>
Run Code Online (Sandbox Code Playgroud)

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

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

Eri*_*ric 29

正如你在源代码中看到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-.

  • 已经在我的回复中说明了。您是否有一些文档对此进行了更详细的解释? (2认同)

Vin*_* B. 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]
...
Run Code Online (Sandbox Code Playgroud)

我没有在git-annex上尝试它,所以他们可能已经解决了这个问题,但是git-flow和git-wtf遵循这个行为.

编辑:git help回退到手册页,所以这一点是无关的(Thx Eric).

安装过程

Brew,macports和apt-get的安装非常棒.但是没有全球公认的向Git添加功能的方法.更具体地说,您没有平台独立的方式来安装"插件".也许make可以做到这一点,但即使这样你也必须自己编写安装脚本.

  • 你在阅读`git help wtf`的问题吗?它说_"没有手动输入git-wtf"_.`git help wtf`别名为`man git-wtf`. (2认同)