I am creating a deploy script for a zend application. The scrip is almost done only I want to verify that a tag exists within the repo to force tags on the team. Currently I have the following code:
# Fist update the repo to make sure all the tags are in
# 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 "No or no correct GIT tag found"
cd /git/repo/path && git rev-list v1.4..
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 "'cd /git/repo/path && git rev-list $1..'" ]
sh is interpreting the && as a shell operator. Change it to -a, that’s
[’s conjunction operator:
[ "$arg1" = "$arg2" -a "$arg1" != "$arg3" ] Also, you should always
quote the variables, because [ gets confused when you leave off
if cd /path/to/repo ; git rev-list $1.. >/dev/null
You could use
git rev-parse instead:
if GIT_DIR=/path/to/repo/.git git rev-parse $1 >/dev/null 2>&1 then echo "Found tag" else echo "Tag not found" fi
git rev-list invokes graph walking, where
git rev-parse would avoid it. Also, as mentioned before by @forvaidya, you could simply list the tags and grep for the one you want:
if GIT_DIR=/path/to/repo/.git git show-ref --tags | egrep -q "refs/tags/$1$" then echo "Found tag" else echo "Tag not found" fi
If you know the tag though, I think it's best just to just look it up via