Los comandos personalizados de Git de PATH no funcionan

Los comandos personalizados de Git de PATH no funcionan

Tengo ~/bin/git-continueun ~/bin/git-abortscript que se ve así:

#!/bin/bash

repo_path=$(git rev-parse --git-dir)

if [ $? -ne 0 ]; then
    exit $?
fi

if [ -d "${repo_path}/rebase-merge" ]; then
    git rebase --continue
elif [ -d "${repo_path}/rebase-apply" ]; then
    git rebase --continue
elif [ -f "${repo_path}/MERGE_HEAD" ]; then
    git merge --continue
elif [ -f "${repo_path}/CHERRY_PICK_HEAD" ]; then
    git cherry-pick --continue
elif [ -f "${repo_path}/REVERT_HEAD" ]; then
    git revert --continue
else
    echo "No something in progress?"
fi

~/binTambién puse el directorio PATHponiendo esto en ~/.bashrc:

[[ ":$PATH:" != *":~/bin:"* ]] && PATH="~/bin:${PATH}"
export PATH

Entonces, verifiqué que $ git-continuefunciona bien, pero git continuegenera el siguiente error: git: 'continue' is not a git command. See 'git --help'.

¿Qué puedo buscar para la posible causa de este error?

Respuesta1

Tu PATHcontiene archivos ~/bin. Tu caparazón entiende lo que ~/significa pero gitaparentemente no. Debe incluir la ruta completa a ~/binen su archivo PATH.

Si usara PATH=~/"bin:${PATH}"en lugar de PATH="~/bin:${PATH}", se produciría una expansión de tilde y PATHse almacenaría la ruta expandida. Pero hay un problema con :~/bin:el interior [[ ]]. No citar la tilde no es la única condición (ver "Expansión de tilde" en man 1 bash), esto dificulta la expansión :~/bin:. Y debe expandirlo para probarlo con la ruta completa en PATH.

Es más fácil de usar $HOME:

[[ ":$PATH:" != *":$HOME/bin:"* ]] && PATH="$HOME/bin:${PATH}"
export PATH

$HOMEse expande antes de que se asigne toda la cadena a la PATHvariable. Este medio PATHahora contiene elllenocamino hacia tu $HOME/bin. gitentenderás este camino.

Respuesta2

Podrías crear unalias personalizadopara solucionar este problema. Puede ser preferible usar un alias porque será más fácil de depurar para alguien que no conoce su personalización y actualmente no está manejando nada en su comando, sino que simplemente desea ejecutar una serie de comandos.

Ver tambiénCómo incrustar un script bash directamente dentro de un alias de giten StackOverflow.

Para cualquiera interesado, parece que la única documentación para este comportamiento actualmente se encuentra en elfuentesegúnEntonces preguntayproblema de git-scm.

información relacionada