Bug in alternates
From: Michael Geddes <hidden>
Date: 2016-06-15 22:49:18
Hi - I had a bit of a hiccup with git yesterday - there's a bit of a story to
it, which at the least might be amusing. There's script to reproduce at the
bottom if you don't care for the story.
I had done a
git clone --reference Foo git@host:Foo Foo.New
then after getting it right, I did
mv Foo Foo.old
mv Foo.New Foo
Then I had all these missing references, and I thought .. oh yeah, that's
cause it can't find the references.. well I don't really know how to change
that (I do now), but I want all the objects in that directory anyway for when
I delete the Foo.old directory..
so I did a
cd Foo
git fetch
.. so all was good for a while.. It was all there and hunky-dory.
Then.. the fated git gui 'garbage collect' dialogue appeared, and I thought,
"why not", so I did.
At that point, git decided to pack all the references (yay) .. and then it
said.. hmm.. are those available in my alternates .. let's see
..Foo/.git/objects .. yeah - all those objects are there.. so I can just
remove that pack.
Woops.
If you're not following the story, the Foo repo had itself as an alternate.
Include me in replies please- I'm not on the list.
//.ichael Geddes
Here's the script:
------------8<-----------testalt--------------
#!/bin/sh
mkdir testaltrep
cd testaltrep
git init
for i in 1 2 3 4 5 6 7 8 9 ; do
touch $i.txt
git add $i.txt
done
git commit -m "Commit"
echo "$PWD/.git/objects" > .git/objects/info/alternates
# Seems like it has to be done like this to get it to repack.
git repack -adl && git repack -ad && git repack -adl
if git checkout master ; then
echo OK
ret=0
else
echo BAD Unable to checkout reference
ret=1
fi
cd ..
rm -rf testaltrep
exit ${ret}