Comandos personalizados do Git do PATH não funcionam

Comandos personalizados do Git do PATH não funcionam

Eu tenho ~/bin/git-continueum ~/bin/git-abortscript, que se parece com isso:

#!/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

Eu também coloquei o diretório ~/bincolocando PATHisto em ~/.bashrc:

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

Então, verifiquei que $ git-continuefunciona bem, mas git continuegera o seguinte erro: git: 'continue' is not a git command. See 'git --help'.

O que posso procurar pela possível causa desse erro?

Responder1

Seu PATHcontém não expandido ~/bin. Seu shell entende o que ~/significa, mas gitaparentemente não. Você deve incluir o caminho completo ~/binem seu arquivo PATH.

Se você usasse PATH=~/"bin:${PATH}"em vez de PATH="~/bin:${PATH}", a expansão do til ocorreria e PATHarmazenaria o caminho expandido. Mas há um problema :~/bin:interno [[ ]]. Não citar o til não é a única condição (veja "Expansão do Til" em man 1 bash), isso dificulta a expansão :~/bin:. E você precisa expandi-lo para testar o caminho completo no arquivo PATH.

É mais fácil de usar $HOME:

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

$HOMEé expandido antes que toda a string seja atribuída à PATHvariável. Isto significa PATHque agora contém ocompletocaminho para o seu $HOME/bin. gitentenderá esse caminho.

Responder2

Você poderia criar umalias personalizadopara contornar isso. Usar um alias pode ser preferível porque será mais fácil depurar para alguém que não está ciente de sua personalização e que atualmente não está manipulando nada em seu comando, mas apenas deseja executar uma série de comandos.

Veja tambémComo incorporar script bash diretamente dentro de um alias gitno StackOverflow.

Para qualquer pessoa interessada, parece que a única documentação para esse comportamento atualmente está nofonteconformeEntão perguntaeproblema do git-scm.

informação relacionada