git-fetch's auto-following of tags fetches all tags for which it finds
objects in the local repository. I feel it were better if not object
existence, but connectivity to the existing refs was checked, like this:
diff --git a/git-fetch.sh b/git-fetch.sh
index fd70696..1b3c459 100755
--- a/git-fetch.sh
+++ b/git-fetch.sh
@@ -314,11 +314,12 @@ case "$no_tags$tags" in
taglist=$(IFS=' ' &&
echo "$ls_remote_result" |
git-show-ref --exclude-existing=refs/tags/ |
while read sha1 name
do
- git-cat-file -t "$sha1" >/dev/null 2>&1 || continue
+ t=$(git-rev-list --max-count=1 "$sha1" --not --all 2>/dev/null) &&
+ test -z "$t" || continue
echo >&2 "Auto-following $name"
echo ".${name}:${name}"
done)
esac
case "$taglist" in
Is this considered in the shell-to-C rewrite that's currently going on?
The background is that I sometimes fetch a branch with tags, but then
decide to remove it (and the tags as well). git-gc and git-prune do not
guarantee that the objects go away because they could be reachable from
reflogs. Now the next git-fetch will fetch the tags again even though I
do not have any refs from which they would be reachable.
-- Hannes