Git help needed: update local repo to specific branch or tag
Jan-Marek Glogowski
glogow at fbihome.de
Fri Sep 15 14:20:18 UTC 2017
Am 15.09.2017 um 08:54 schrieb Stephan Bergmann:
> 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?
Use detached heads and don't use local branches at all. Untested, but
should work:
if [ ... ]; then
git fetch --prune --tags origin
# cleanup all patched stuff - probably not needed
git reset --hard
git checkout --detached "origin/${my_gitbranch?}"
else
git clone --no-checkout git://gerrit.libreoffice.org/core
git checkout --detached "origin/${my_gitbranch?}"
fi
Alternatively to checkouts you can just reset your local branch to your
preferred state using:
git reset --hard "origin/${my_gitbranch?}"
Just remember that at this point the branch is "fake".
HTH
Jan-Marek
More information about the LibreOffice
mailing list