tag - Extendiendo la funcionalidad de Git
git tag best practices (3)
Ejemplos de la vida real
Mirando alrededor, hay muchos proyectos que extienden la línea de comandos de Git:
-
git-wtf
(escrito en Ruby) usa brew o instalación manual para poner un ejecutable en/usr/bin
(o fue/usr/local
?). Y parece que Git tiene un mecanismo que sabe que cuando escribesgit wtf
en realidad está buscando cualquier script en PATH llamadogit-wtf
. -
git-annex
(escrito en haskell) tiene un sabor más complejo. Pero incluso si usa Cabal para su instalación (y tiene una larga lista de dependencias si no la tiene), parece que usa el mismo principio básico que git-wtf. (Git lo encontrará en la ruta ejecutable mientras escribe elgit annex
) -
git-flow
(escrito en shell) usa brew / macport / apt-get / wget + bash para instalarse. Y, una vez más, parece utilizar el mismo mecanismo.
Solución (?)
Por lo tanto, es ciertamente posible escribir su propio script personalizado y luego ponerlo a disposición colocándolo en cualquiera de las rutas enumeradas en su variable PATH.
Pero por lo que sé, hay algunas deficiencias ...
Problemas conocidos
La documentación
Realmente no estás extendiendo Git, por lo que algunos comandos no funcionan:
$ 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]
...
No lo probé en git-annex por lo que pueden haber solucionado este problema, pero git-flow y git-wtf siguen este comportamiento.
EDITAR : git help
a las páginas de manual, por lo que este punto no está relacionado (Thx Eric).
El proceso de instalación
Instalación por Brew, macports y apt-get son increíbles. Pero no hay una forma aceptada a nivel mundial de agregar funciones a Git. Más específicamente, no tiene una plataforma independiente para instalar sus "complementos". Tal vez make
haría el truco, pero incluso entonces tendría que escribir usted mismo un script de instalación.
Me preguntaba si había una manera fácil de extender los comandos de Git.
Así que podría crear comandos como:
git my-custom-made-extension --my-options <my-other-arguments>
En un mundo perfecto, podría hacerlo en cualquier idioma que me plazca y podría agregar mis extensiones personalizadas a cualquier entorno de desarrollo con bastante facilidad.
Digamos, ¿algo así como el soporte de plugins en Vim?
Como puede ver en el código fuente en execv_dashed_external
, si execv_dashed_external
el comando git-my-custom-made-extension
, entonces git alias:
-
git my-custom-made-extension ...
→git-my-custom-made-extension ...
-
git help my-custom-made-extension
→man git-my-custom-made-extension
No hay nada especial en "extender git". Simplemente cree un programa como lo haría normalmente, y asegúrese de que el nombre comience con git-
.
Probablemente desee crear un alias, ya sea manualmente o con git config
. La página de manual cubre esto en detalle. Un ejemplo realmente básico sería algo como:
git config --global alias.log1 "log --oneline"