Ich habe ~/bin/git-continue
ein ~/bin/git-abort
Skript, 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, ~/bin
indem PATH
ich Folgendes eingefügt habe ~/.bashrc
:
[[ ":$PATH:" != *":~/bin:"* ]] && PATH="~/bin:${PATH}"
export PATH
Ich habe also überprüft, dass es $ git-continue
einwandfrei funktioniert, aber git continue
folgenden 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 PATH
enthält nicht erweiterte ~/bin
. Ihre Shell versteht, was ~/
bedeutet, git
tut es aber anscheinend nicht. Sie sollten den vollständigen Pfad ~/bin
in Ihrem angeben PATH
.
Wenn Sie PATH=~/"bin:${PATH}"
anstelle von verwenden würden PATH="~/bin:${PATH}"
, würde eine Tilde-Erweiterung erfolgen und PATH
der 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
$HOME
wird expandiert, bevor der ganze String der PATH
Variable zugewiesen wird. Das heißt, PATH
jetzt enthält dervollPfad zu Ihrem $HOME/bin
. git
wird 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.