Cómo alias una label en Git?

Tengo un alias de command Git para consultar la última label de un repository:

~/.gitconfig :

 checkout-latest = !git checkout $(git describe --tags `git rev-list --tags --max-count=1`) 

Entonces puedo usarlo en repositorys debidamente labeldos como este:

 $ git checkout-latest 

Tengo alias de command para el command de pago:

~/.gitconfig :

 co = checkout 

El checkout-latest no funciona con los alias de command para el pago:

 $ git co-latest git: 'co-latest' is not a git command. See 'git --help'. 

¿Cómo puedo configurar Git para que pueda usar lo último como un alias de label que apunta a la última label determinada por progtwigción? Me gustaría usarlo así:

 $ git checkout latest 

y

 $ git co latest 

Tenga en count que no hay guiones entre el subcommand y la label en mis variantes deseadas.

La única solución para este tipo de cosas que puedo pensar es una function de shell git que "despache" en base a arguments.

Algo como esto:

 git() { if [ "$1" != checkout ] || [ "$#" -ne 2 ]; then git "$@" return fi local lastrev lasttag case $2 in :latest) lastrev=$(git rev-list --tags --max-count=1) set -- checkout "$(git describe --tags "$lastrev")" ;; esac git "$@" } 

Los alias de la label deben ser no válidos como references normales para ser seguros por lo tanto, el uso de check-ref-format .

Esta construcción permite agregar "alias" de tags arbitrarias a través de la statement de caso.

Esta function es muy limitada en términos de qué arguments se pueden usar si desea usar la label "alias". Específicamente no puedes pasar ninguno. El command debe ser git checkout <alias> . Analizar todas las combinaciones válidas de git checkout es simplemente demasiado difícil de molestar para esto ahora (aunque probablemente podría hacerse).

Los alias de Git no pueden hacer reference a otros alias.

Sin embargo, puede lograr esto con otra capa de indirección:

 co-latest = !git checkout-latest "$@" 

Git ya puede alias tags en el sentido de que puedes crear una nueva label que apunte a la misma confirmación como otra label.

Lo que parece querer es un alias macro; para que Git reconozca una palabra especial como latest y la sustituya dinámicamente con una label.

Dado que probablemente no va a suceder sin modificar Git, puede hacer que el shell lo haga e interpolar mediante la sustitución $(...) command:

 git checkout $(latest) 

latest es solo un script o function de shell que calcula dinámicamente la label y la imprime en su salida estándar.

Otra idea es tener instalada una latest label real como alias en el repository. Cuando se label un cambio nuevo, lo latest se envía a eso (a través de la git tag -F ). Tal labeldo es un cambio no rápido, por supuesto, por lo que el repository upstream tiene que permitir eso.