Расширение функциональности 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-extension
→man 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"