Bare repository ORIG's master looks like this:
o--o--o--o--v1--o--v2--o--o--o HEAD
where v1 and v2 are (annotated) tagged commits.
Repository SLAVE is a mirror clone of ORIG which (very deliberately!) lags behind (i.e., its HEAD is one of the earlier (and usually tagged) commits on ORIG). SLAVE's master was like this:
o--o--o--o--v1 HEAD
We wanted to update its HEAD to v2, so did:
git fetch ORIG tag v2
This gave us:
o--o--o--o--v1 HEAD
\
o--v2It did not update SLAVE's HEAD to v2, which we wanted. This was worked-around by editing refs/heads/master(?) but we don't want to do that again (esp. since we got it wrong the first time (Thank you back-ups!)).
Whilst we want to switch to a push from ORIG to SLAVE model, until that happens (there are some IT issues), we are still fetching on SLAVE from ORIG. Hence, how can we avoid the above issue; that is, what should we have done? Searching various docs has failed to find any clew or answer.
There are several GIT versions involved (all(?) are 1.5-ish or later). Below is a script to reproduce the situation (tested with v1.7.0.2).
cheers! -blf-
=====(cut here and below)===== demo.sh =====(git version 1.7.0.2)===== #!/bin/bash
add_new_files() {
touch -- "$@"
git add -- "$@"
git commit -m "Added: $*"
}set -xe
mkdir ORIG cd ORIG git init # ORIG is bare in real case
add_new_files foo add_new_files bar
git tag -a -m First v1
cd .. git clone --bare --mirror ORIG SLAVE.git
cd ORIG
add_new_files xyzzy add_new_files plover
git tag -a -m Update v2
add_new_files stuff add_new_files more_stuff
cd ../SLAVE.git
git fetch --verbose origin tag v2
# SLAVE's master's HEAD has not changed .... ;-(
git tag -l git log --oneline master git log --oneline v2 =====(cut here and above)===== demo.sh =====(git version 1.7.0.2)=====