At
<https://gerrit.libreoffice.org/gitweb?p=dev-tools.git;a=blob;f=flatpak/build.sh;h=fab02d7f71f38c1f30174a534627db2bcc211ebd;hb=HEAD#l50>,
if [ -e "${my_dir?}"/lo ]; then
git -C "${my_dir?}"/lo fetch --tags
git -C "${my_dir?}"/lo checkout "${my_gitbranch?}"
else
git clone --branch "${my_gitbranch?}"
git://gerrit.libreoffice.org/core \
"${my_dir?}"/lo
fi
I want to get a local checkout of $my_gitbranch (which will either
denote a branch like libreoffice-5-4 or a tag like libreoffice-5.4.1.2)
of our LO repo. The "else" case is straightforward.
But if I already have the repo checked out from a previous run of the
script (with a potentially different value for $my_gitbranch), I don't
want to clone again, but re-use the existing repo and just update it
accordingly (the "then" branch). The sequence of git commands works
fine if $my_gitbranch is a tag.
However, if $my_gitbranch is a branch, and the existing repo happens to
already have that branch checked out, then the 'git checkout' will
report that I'm behind the remote repo by N commits and should
fast-forward.
So adding a 'git pull' after the 'git checkout' would help the case
where $my_gitbranch is a branch. But when it is a tag, such a 'git
pull' would fail, stating that I'm not on a branch.
Is there a magic git incantation that does what I want?