У меня есть сценарий (названный update_content.sh
) это, как предполагается, выполняет 3 последовательных git
команды и первая версия были похожи на это:
#!/bin/sh
git fetch --all && git reset --hard && git merge
Когда я выполняю его, я вижу этот вывод:
web@bane:~# ./update_content.sh
Fetching origin
error: unable to create file locales/fr.json (File exists)
error: unable to create file locales/it.json (File exists)
fatal: Could not reset index file to revision 'HEAD'.
Однако, когда я изменил его на это:
#!/bin/sh
git fetch --all
git reset --hard
git merge
И выполненный это я вижу это:
web@bane:~# ./update_content.sh
Fetching origin
HEAD is now at 5859b2e Added Business tab
Already up-to-date.
Подход новой строки получает результат, который я хочу однако, он не имеет, "не продолжаются, если шаг привел к сбою" качество &&
. Есть ли что-то о как git
работы, который делает это несовместимым с &&
или я пропускаю что-то о &&
?
Я сделал немного больше рытья и нашел что один лайнер с &&
когда выполнено из командной строки не бросает ошибки, но также и на самом деле не сбрасывает локальную рабочую копию, однако подход новой строки в сценарии (и выполнять по одному) делает.
Можно также создать псевдоним, чтобы объединить все команды в цепочку и затем выполнить сам объект псевдонима.
git config alias.op '!git fetch --all && git reset --hard && git merge'
git op
&&
только выполнения вторая команда, если первая, из которой выходят с состоянием 0 (было успешно). ;
выполнения оба команды, даже если первый выходит с не нулевым состоянием.
Ваш пример с &&
может эквивалентно перефразироваться как
if git fetch --all ; then
if git reset --hard; then
git merge
fi
fi