Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


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

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.