Shell-скрипт создает файлы для дельта-релиза Flyway, который применяет все изменения для нового выпуска в базе данных Oracle.
- "git checkout" новый релиз-тег со всеми новыми изменениями
- Убедитесь, что код возврата вызова "git checkout" в порядке
- Получить список всех файлов, которые изменились между выпусками
- Измененные файлы в основном копируются в новый каталог и получают сгенерированный префикс для Flyway2
Позже эти файлы можно легко применить с помощью Flyway ...
Произошла проблема недавно: Шаг 1 может завершиться с ошибкой из-за "фатального: невозможно создать '... /. git / index.lock': файл существует". ошибка (скорее всего, из-за обновления статуса SourceTree).
К сожалению, в этом случае код возврата git равен 0 (что означает отсутствие ошибки), что означает, что скрипт не замечает, что файлы были не обновляется на шаге 2 и продолжается с шагами 3 и 4 (но с неверными файлами).
В этом примере я пытаюсь обойти проблему, ожидая, пока «index.lock» не будет удалены, однако это не отказоустойчиво! Может быть, index.lock создан сразу после того, как пройден while-l oop, но перед проверкой git и у меня снова возникла такая же проблема.
GIT="Path to Git.exe"
INDEXLOCK="Path to potential .git/index.lock"
#Unfortunately git checkout returns 0 (everything is ok), when it failed due to an existing index.lock
#The script would then commence, although the sources were not checkout correctly!
#Loop until index.lock does not exist anymore
while [ -f "$INDEXLOCK" ]
do
echo "Index.lock exists! Waiting until open git process is finished."
sleep 5
done
echo " "
echo "Trying to check out tag: $2"
$GIT checkout "$2" -q
if [ $? = 1 ]; then
echo "Error: Can't checkout tag: $2"
exit;
fi
echo "Check out finished"
Есть ли возможность сделать уверен, что сценарий оболочки останавливается при ошибке «.git / index.lock»?