est ici une boucle possible, bien que ce n'est pas clair pour moi ce que vous voulez faire avec la branche à distance ou le nom de l'étiquette, et/ou l'arbitre local:
#! /bin/sh
NULLSHA=0000000000000000000000000000000000000000 # 40 0's
say() {
echo "[email protected]" 1>&2
}
while read localref localhash foreignref foreignhash; do
case $foreignref in
refs/heads/*)
reftype=branch
shortref=${foreignref#refs/heads/};;
refs/tags/*)
reftype=tag
shortref=${foreignref#refs/tags/};;
*) reftype=unknown-ref-type
shortref=$foreignref;;
esac
say "pushing to $reftype $shortref"
case $localhash,$foreignhash in
$NULLSHA,*) say "(push with intent to delete)";;
*,$NULLSHA) say "(push with intent to create)";;
*) say "(push with intent to update from $foreignhash to $localhash)"
# for branch updates only, let's see if it's a fast-forward
if [ $reftype = branch ]; then
if git merge-base --is-ancestor $foreignhash $localhash; then
say "(this is a fast-forward)"
else
say "(this can only work if forced)"
fi
fi;;
esac
done
(note: ceci n'est pas bien testé).
fermer, mais pas tout à fait à droite: voir l'exemple 'réfs/heads/master 67890 réfs/heads/foreign 12345' dans la section pré-push hook de la documentation de git hooks: https://www.kernel.org/ pub/software/scm/git/docs/githooks.html – torek
On dirait que $ (echo $ {refname # refs/têtes /} | awk '{print $ 1;}') ''le ferait fonctionner – Guig
@Guig: plus simple : 'pendant la lecture refname localhash foreignref foreignhash; fais ... 'Mais tu devrais aussi vérifier que' refname' (que je renommerais comme 'localref') commence vraiment par' refs/heads/', aussi, sinon pousser la balise' v1.2' va essayer de faire quelque chose avec * branche * 'v1.2', qui n'existe probablement pas. – torek