Benutzerdefinierte Git-Befehle von PATH funktionieren nicht

Benutzerdefinierte Git-Befehle von PATH funktionieren nicht

Ich habe ~/bin/git-continueein ~/bin/git-abortSkript, das so aussieht:

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

Ich habe das Verzeichnis auch so geändert, ~/binindem PATHich Folgendes eingefügt habe ~/.bashrc:

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

Ich habe also überprüft, dass es $ git-continueeinwandfrei funktioniert, aber git continuefolgenden Fehler ausgibt: git: 'continue' is not a git command. See 'git --help'.

Wo kann ich nach möglichen Ursachen für diesen Fehler suchen?

Antwort1

Ihr PATHenthält nicht erweiterte ~/bin. Ihre Shell versteht, was ~/bedeutet, gittut es aber anscheinend nicht. Sie sollten den vollständigen Pfad ~/binin Ihrem angeben PATH.

Wenn Sie PATH=~/"bin:${PATH}"anstelle von verwenden würden PATH="~/bin:${PATH}", würde eine Tilde-Erweiterung erfolgen und PATHder erweiterte Pfad würde gespeichert. Aber es gibt ein Problem mit :~/bin:innerhalb von [[ ]]. Das Nicht-Angeben von Tilde ist nicht die einzige Bedingung (siehe „Tilde-Erweiterung“ in man 1 bash), dies erschwert die Erweiterung :~/bin:. Und Sie müssen es erweitern, um es gegen den vollständigen Pfad in zu testen PATH.

Es ist einfacher zu verwenden $HOME:

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

$HOMEwird expandiert, bevor der ganze String der PATHVariable zugewiesen wird. Das heißt, PATHjetzt enthält dervollPfad zu Ihrem $HOME/bin. gitwird diesen Pfad verstehen.

Antwort2

Sie könnten einebenutzerdefinierter Aliasum dies zu umgehen. Die Verwendung eines Alias ​​ist möglicherweise vorzuziehen, da das Debuggen für jemanden, der Ihre Anpassung nicht kennt, einfacher ist und Sie derzeit in Ihrem Befehl nichts verarbeiten, sondern nur eine Reihe von Befehlen ausführen möchten.

Siehe auchSo betten Sie ein Bash-Skript direkt in einen Git-Alias ​​einauf StackOverflow.

Für alle, die es interessiert: Die einzige Dokumentation für dieses Verhalten befindet sich derzeit imQuellegemäßSO-FrageUndGit-SCM-Problem.

verwandte Informationen