Расширение функциональности Git
Мне было интересно, есть ли простой способ расширить команды Git.
Поэтому я мог бы создавать команды вроде:
git my-custom-made-extension --my-options <my-other-arguments>
В идеальном мире я бы смог сделать это на любом языке, который мне нравится, и я бы смог легко добавить свои пользовательские расширения в любую среду разработки.
Скажем, что-то вроде поддержки плагинов в Vim?
Ответы
Ответ 1
Как вы можете видеть в исходном коде в 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-
.
Ответ 2
Примеры реальной жизни
Оглядываясь, есть много проектов, которые расширяют командную строку Git:
-
git-wtf
(написанный в Ruby) использует brew или ручную установку, чтобы поместить исполняемый файл в /usr/bin
(или был он /usr/local
?). И похоже, что Git имеет механизм, который знает, что когда вы пишете git wtf
, он действительно ищет любой script в PATH с именем git-wtf
.
-
git-annex
(написанный в haskell) имеет более сложный аромат. Но даже если он использует Cabal для его установки (и имеет длинный список зависимостей, если у вас его нет), похоже, что он использует тот же базовый принцип, что и git -wtf. (Git найдет его в исполняемом пути при написании git annex
)
-
git-flow
(написанный в оболочке) использует brew/macport/apt-get/wget + bash для установки. И, опять же, он, похоже, использует тот же механизм.
Решение (?)
Так что, безусловно, можно написать свой собственный script, а затем сделать его доступным, разместив его на любых путях, перечисленных в вашей переменной 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
назад к страницам man, так что эта точка не имеет отношения к ней (спасибо Eric).
Процесс установки
Установка с помощью Brew, macports и apt-get поразительны. Но нет общепринятого способа добавления функций в Git. Более конкретно, у вас нет независимого от платформы способа установки ваших "плагинов". Может быть, make
выполнит трюк, но даже тогда вам придется самому написать установку script.
Ответ 3
Вероятно, вы хотите создать псевдоним, либо вручную, либо с помощью git config
. Эта страница подробно описывает это. На самом деле основным примером может быть следующее:
git config --global alias.log1 "log --oneline"