У меня есть ~/bin/git-continue
скрипт ~/bin/git-abort
, который выглядит так:
#!/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
~/bin
Я также установил каталог, PATH
указав это ~/.bashrc
:
[[ ":$PATH:" != *":~/bin:"* ]] && PATH="~/bin:${PATH}"
export PATH
Итак, я проверил, все $ git-continue
работает нормально, но git continue
выдает следующую ошибку:
git: 'continue' is not a git command. See 'git --help'.
Какую возможную причину этой ошибки можно найти?
решение1
Ваш PATH
содержит нераскрытый ~/bin
. Ваша оболочка понимает, что ~/
означает, но, git
по-видимому, нет. Вам следует включить полный путь к ~/bin
в ваш PATH
.
Если бы вы использовали PATH=~/"bin:${PATH}"
вместо PATH="~/bin:${PATH}"
, произошло бы расширение тильды и PATH
сохранило бы расширенный путь. Но есть проблема с :~/bin:
внутри [[ ]]
. Отсутствие кавычек тильды — не единственное условие (см. «Раскрытие тильды» в man 1 bash
), это :~/bin:
затрудняет расширение. И вам нужно расширить его для проверки на полный путь в PATH
.
Использовать проще $HOME
:
[[ ":$PATH:" != *":$HOME/bin:"* ]] && PATH="$HOME/bin:${PATH}"
export PATH
$HOME
расширяется до того, как вся строка будет назначена переменной PATH
. Это означает, PATH
что теперь содержитполныйпуть к вашему $HOME/bin
. git
поймет этот путь.
решение2
Вы могли бы создатьпользовательский псевдонимчтобы обойти это. Использование псевдонима может быть предпочтительнее, поскольку так будет проще отлаживать код для того, кто не знает о вашей настройке, и вы в данный момент ничего не обрабатываете в своей команде, а просто хотите запустить ряд команд.
Смотрите такжеКак встроить скрипт bash непосредственно в псевдоним gitна StackOverflow.
Для тех, кому интересно, похоже, что единственная документация по этому поведению на данный момент находится висточниксогласноТАКОЙ вопросипроблема с git-scm.