Я создаю развертывание script для приложения zend. Сценарий почти завершен только, я хочу проверить, существует ли в репозитории тег, чтобы заставить теги в команде. В настоящее время у меня есть следующий код:
# Fist update the repo to make sure all the tags are in
cd /git/repo/path
git pull
# Check if the tag exists in the rev-list.
# If it exists output should be zero,
# else an error will be shown which will go to the else statement.
if [ -z "'cd /git/repo/path && git rev-list $1..'" ]; then
echo "gogo"
else
echo "No or no correct GIT tag found"
exit
fi
С нетерпением ждем ваших отзывов!
Update
Когда я выполняю в командной строке следующее:
cd /git/repo/path && git rev-list v1.4..
Я получаю NO вывод, что хорошо. Хотя при выполнении:
cd /git/repo/path && git rev-list **BLA**..
Я получаю ошибку, что снова хорошо:
fatal: ambiguous argument 'BLA..': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
В заявлении -z говорится, что если sting пуст, то... Другими словами, он отлично работает через командную строку. Хотя, когда я использую ту же команду в оболочке script внутри инструкции, она не работает.
[ -z "'cd /git/repo/path && git rev-list $1..'" ]
Этот метод, вдохновленный Подтвердить, существует ли фиксация
Обновление 2
Я нашел проблему:
См. Использование if elif fi в сценариях оболочки >
sh интерпретирует && как оператор оболочки. Измените его на -a, thats Оператор слияния:
[ "$ arg1" = "$ arg2" -a "$ arg1" != "$ arg3" ] Кроме того, вы всегда должны цитируйте переменные, потому что [запутывается, когда вы опускаетесь Аргументы.
Другими словами, я изменил значение &&
на ;
и упростил условие. Теперь он работает красиво.
if cd /path/to/repo ; git rev-list $1.. >/dev/null
then
echo "gogo"
else
echo "WRONG"
exit
fi