Расширение функциональности Git

Мне было интересно, есть ли простой способ расширить команды Git.

Так что я мог бы создавать команды, такие как:

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

В идеальном мире я мог бы делать это на любом языке, который мне нравится, и я мог бы довольно легко добавлять свои собственные расширения в любую среду разработки.

Допустим, что-то вроде поддержки плагинов в Vim?

3 ответа

Решение

Как вы можете видеть в исходном коде в 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:

  • 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 (написано в оболочке) использует 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, Страница man описывает это подробно. Действительно базовый пример будет что-то вроде:

git config --global alias.log1 "log --oneline"
Другие вопросы по тегам