{"thread":{"id":"39453","subject":"BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","startedAt":"2015-05-29T00:10:42Z","lastAt":"2015-06-02T23:48:35Z","messageCount":9,"participants":["Michael Darling","Matthieu Moy","Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"262387","messageId":"CABRuA+iVRZR9SxvYVCO5zd0hZEbn6tioyP6dZ5xSbaAeNF4w+w@mail.gmail.com","threadId":"39453","inReplyTo":null,"subject":"BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Michael Darling","fromEmail":"darlingm@gmail.com","sentAt":"2015-05-29T00:10:42Z","receivedAt":"2015-05-29T00:10:42Z","isPatch":false,"sender":{"key":"darlingm@gmail.com","avatar":null},"body":"Using git version 2.4.1.171.ga34f239, and gitolite v3.6.3 (b05c94ff).\nI apologize I don't know enough about the client vs server functions,\nduring a git push, to know whether this is a git or gitolite issue.\n\nAfter cloning the public glibc repo, and creating a new bare repo on\nmy local gitserver by adding it to gitolite.conf and pushing it:\n\n$ git push --set-upstream origin\nCounting objects: 339319, done.\nDelta compression using up to 10 threads.\nCompressing objects: 100% (55496/55496), done.\nWriting objects: 100% (339319/339319), 99.28 MiB | 22.67 MiB/s, done.\nTotal 339319 (delta 283044), reused 331722 (delta 276505)\nTo gitserver:glibctest\n * [new branch]      master -> master\nBranch master set up to track remote branch master from origin.\n\n**After resetting to before the last push**: (removing and re-cloning\nmy clone of the public glibc repo, and resetting the repo on my local\ngitserver back to a new bare repo (removing the repo from\ngitolite.conf, pushing the conf, removing the repo directory in the\ngitolite user, re-adding the repo to gitolite.conf, and pushing the\nconf):\n\n$ git push --tags --set-upstream origin\nCounting objects: 382283, done.\nDelta compression using up to 10 threads.\nCompressing objects: 100% (62075/62075), done.\nWriting objects: 100% (382283/382283), 101.16 MiB | 19.64 MiB/s, done.\nTotal 382283 (delta 316774), reused 376933 (delta 312407)\nTo gitserver:glibctest\n * [new tag]         cvs/ChangeLog -> cvs/ChangeLog\n * [new tag]         ... <a bunch more> ...\n * [new tag]         glibc-2.9 -> glibc-2.9\n\nNote this time there is NO:\n\n * [new branch]      master -> master\nBranch master set up to track remote branch master from origin.\n\nHence, my local gitserver has no master branch.  If cloning in another\nlocation, I get a \"warning: remote HEAD refers to nonexistent ref,\nunable to checkout.\" that I don't get if I do a \"git push\n--set-upstream origin && git push --tags\" instead.\n"},{"id":"262388","messageId":"vpqbnh4hro7.fsf@anie.imag.fr","threadId":"39453","inReplyTo":"CABRuA+iVRZR9SxvYVCO5zd0hZEbn6tioyP6dZ5xSbaAeNF4w+w@mail.gmail.com","subject":"Re: BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@grenoble-inp.fr","sentAt":"2015-05-29T05:35:36Z","receivedAt":"2015-05-29T05:35:36Z","isPatch":false,"sender":{"key":"matthieu.moy@grenoble-inp.fr","avatar":"https://gravatar.com/avatar/72c8a2705971a25dfaff23cece15130d405685845d911aedd5667ace277f3fc5?d=mp&s=160"},"body":"Michael Darling <darlingm@gmail.com> writes:\n\n> $ git push --tags --set-upstream origin\n\n[...]\n\n> Note this time there is NO:\n>\n>  * [new branch]      master -> master\n> Branch master set up to track remote branch master from origin.\n\nman git-push says:\n\nSYNOPSIS\n       git push [...] [<repository> [<refspec>...]]\n[...]\n       --tags\n           All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command\n           line.\n\nYou did not provide any refspec (you provided <repository> but not\n<refspec>), hence --tags pushes only tags. So, this is the expected\nbehavior.\n\nThat said, we may want to add an option like --tags-also that would push\ntags _in addition_ to what would normally be pushed. --follow-tags does\nmore or less this, though, but only for annotated tags pointing at a ref\nbeing pushed.\n\n-- \nMatthieu Moy\nhttp://www-verimag.imag.fr/~moy/\n"},{"id":"262423","messageId":"xmqq617bflzh.fsf@gitster.dls.corp.google.com","threadId":"39453","inReplyTo":"vpqbnh4hro7.fsf@anie.imag.fr","subject":"Re: BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-05-29T15:21:22Z","receivedAt":"2015-05-29T15:21:22Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:\n\n> You did not provide any refspec (you provided <repository> but not\n> <refspec>), hence --tags pushes only tags. So, this is the expected\n> behavior.\n\nRight.\n\n> That said, we may want to add an option like --tags-also that would push\n> tags _in addition_ to what would normally be pushed. --follow-tags does\n> more or less this, though, but only for annotated tags pointing at a ref\n> being pushed.\n\nYeah.  I am not sure --tags-also is necessarily a good thing (I do\nnot think \"fetch --tags\" is a good thing, either).  If --follow-tags\ndoes not touch lightweight ones, that may be a bug we would want to\nfix.  I did not mean to implement --follow-tags that way, and I do\nnot offhand remember if there was a reason to omit lightweight ones.\n\nThanks.\n"},{"id":"262428","messageId":"vpq4mmvs7zx.fsf@anie.imag.fr","threadId":"39453","inReplyTo":"xmqq617bflzh.fsf@gitster.dls.corp.google.com","subject":"Re: BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@grenoble-inp.fr","sentAt":"2015-05-29T15:45:06Z","receivedAt":"2015-05-29T15:45:06Z","isPatch":false,"sender":{"key":"matthieu.moy@grenoble-inp.fr","avatar":"https://gravatar.com/avatar/72c8a2705971a25dfaff23cece15130d405685845d911aedd5667ace277f3fc5?d=mp&s=160"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> Yeah.  I am not sure --tags-also is necessarily a good thing (I do\n> not think \"fetch --tags\" is a good thing, either).  If --follow-tags\n> does not touch lightweight ones, that may be a bug we would want to\n> fix.  I did not mean to implement --follow-tags that way, and I do\n> not offhand remember if there was a reason to omit lightweight ones.\n\nIt's documented to push only annotated tags both in the commit message\nof c2aba15 (push: --follow-tags, 2013-03-04) and in the man page, so it\nwas done on purpose, but I don't know if it was a good thing.\n\nPerhaps a justification is that annotated tags are clearly meant to be\npublic while lightweight tags can also be used as private bookmarks.\n\nIn any case, the fact that it's been this way and documented this way\nsince 2013 makes it a bit hard to change now.\n\n-- \nMatthieu Moy\nhttp://www-verimag.imag.fr/~moy/\n"},{"id":"262432","messageId":"xmqqeglze5cu.fsf@gitster.dls.corp.google.com","threadId":"39453","inReplyTo":"vpq4mmvs7zx.fsf@anie.imag.fr","subject":"Re: BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-05-29T16:05:53Z","receivedAt":"2015-05-29T16:05:53Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:\n\n> Perhaps a justification is that annotated tags are clearly meant to be\n> public while lightweight tags can also be used as private bookmarks.\n\nAh, thanks.  That makes perfect sense.\n\n> In any case, the fact that it's been this way and documented this way\n> since 2013 makes it a bit hard to change now.\n\nThat too.\n\nI recall \"fetch --tags\" was updated to become your \"--tags-also\" by\ne66ef7ae (Merge branch 'mh/fetch-tags-in-addition-to-normal-refs',\n2013-12-12).  Perhaps we should do the same on the push side.\n"},{"id":"262435","messageId":"xmqq617be3qs.fsf@gitster.dls.corp.google.com","threadId":"39453","inReplyTo":"xmqqeglze5cu.fsf@gitster.dls.corp.google.com","subject":"Re: BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-05-29T16:40:43Z","receivedAt":"2015-05-29T16:40:43Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> I recall \"fetch --tags\" was updated to become your \"--tags-also\" by\n> e66ef7ae (Merge branch 'mh/fetch-tags-in-addition-to-normal-refs',\n> 2013-12-12).  Perhaps we should do the same on the push side.\n\n\n\n\n builtin/push.c | 18 ++++++++++--------\n 1 file changed, 10 insertions(+), 8 deletions(-)\n\ndiff --git a/builtin/push.c b/builtin/push.c\nindex 57c138b..ec215d7 100644\n--- a/builtin/push.c\n+++ b/builtin/push.c\n@@ -382,7 +382,7 @@ static int push_with_options(struct transport *transport, int flags)\n \treturn 1;\n }\n \n-static int do_push(const char *repo, int flags)\n+static int do_push(const char *repo, int flags, int tags_too)\n {\n \tint i, errs;\n \tstruct remote *remote = pushremote_get(repo);\n@@ -429,6 +429,10 @@ static int do_push(const char *repo, int flags)\n \t\t} else if (!(flags & TRANSPORT_PUSH_MIRROR))\n \t\t\tsetup_default_push_refspecs(remote);\n \t}\n+\n+\tif (tags_too)\n+\t\tadd_refspec(\"refs/tags/*\");\n+\n \terrs = 0;\n \turl_nr = push_url_of_remote(remote, &url);\n \tif (url_nr) {\n@@ -494,7 +498,7 @@ static int git_push_config(const char *k, const char *v, void *cb)\n int cmd_push(int argc, const char **argv, const char *prefix)\n {\n \tint flags = 0;\n-\tint tags = 0;\n+\tint tags_too = 0;\n \tint rc;\n \tconst char *repo = NULL;\t/* default repository */\n \tstruct option options[] = {\n@@ -504,7 +508,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)\n \t\tOPT_BIT( 0 , \"mirror\", &flags, N_(\"mirror all refs\"),\n \t\t\t    (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE)),\n \t\tOPT_BOOL( 0, \"delete\", &deleterefs, N_(\"delete refs\")),\n-\t\tOPT_BOOL( 0 , \"tags\", &tags, N_(\"push tags (can't be used with --all or --mirror)\")),\n+\t\tOPT_BOOL( 0 , \"tags\", &tags_too, N_(\"push tags (can't be used with --all or --mirror)\")),\n \t\tOPT_BIT('n' , \"dry-run\", &flags, N_(\"dry run\"), TRANSPORT_PUSH_DRY_RUN),\n \t\tOPT_BIT( 0,  \"porcelain\", &flags, N_(\"machine-readable output\"), TRANSPORT_PUSH_PORCELAIN),\n \t\tOPT_BIT('f', \"force\", &flags, N_(\"force updates\"), TRANSPORT_PUSH_FORCE),\n@@ -535,20 +539,18 @@ int cmd_push(int argc, const char **argv, const char *prefix)\n \tgit_config(git_push_config, &flags);\n \targc = parse_options(argc, argv, prefix, options, push_usage, 0);\n \n-\tif (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))\n+\tif (deleterefs &&\n+\t    (tags_too || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))\n \t\tdie(_(\"--delete is incompatible with --all, --mirror and --tags\"));\n \tif (deleterefs && argc < 2)\n \t\tdie(_(\"--delete doesn't make sense without any refs\"));\n \n-\tif (tags)\n-\t\tadd_refspec(\"refs/tags/*\");\n-\n \tif (argc > 0) {\n \t\trepo = argv[0];\n \t\tset_refspecs(argv + 1, argc - 1, repo);\n \t}\n \n-\trc = do_push(repo, flags);\n+\trc = do_push(repo, flags, tags_too);\n \tif (rc == -1)\n \t\tusage_with_options(push_usage, options);\n \telse\n"},{"id":"262440","messageId":"vpqoal3p8wo.fsf@anie.imag.fr","threadId":"39453","inReplyTo":"xmqqeglze5cu.fsf@gitster.dls.corp.google.com","subject":"Re: BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@grenoble-inp.fr","sentAt":"2015-05-29T17:53:43Z","receivedAt":"2015-05-29T17:53:43Z","isPatch":false,"sender":{"key":"matthieu.moy@grenoble-inp.fr","avatar":"https://gravatar.com/avatar/72c8a2705971a25dfaff23cece15130d405685845d911aedd5667ace277f3fc5?d=mp&s=160"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> I recall \"fetch --tags\" was updated to become your \"--tags-also\" by\n> e66ef7ae (Merge branch 'mh/fetch-tags-in-addition-to-normal-refs',\n> 2013-12-12).  Perhaps we should do the same on the push side.\n\nWould we still have a way to push tags only with this?\n\nfetch and push are a bit different: it's almost never a bad idea to run\nfetch (I see remote-tracking as a kind of cache, and fetch is the way to\nrefresh this cache), but pushing too much can be harmful. Not a strong\nobjection, but I'm not sure that this change is 100% safe for everyone.\n\n-- \nMatthieu Moy\nhttp://www-verimag.imag.fr/~moy/\n"},{"id":"262442","messageId":"xmqqsiafclcp.fsf@gitster.dls.corp.google.com","threadId":"39453","inReplyTo":"vpqoal3p8wo.fsf@anie.imag.fr","subject":"Re: BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-05-29T18:03:18Z","receivedAt":"2015-05-29T18:03:18Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:\n\n> Junio C Hamano <gitster@pobox.com> writes:\n>\n>> I recall \"fetch --tags\" was updated to become your \"--tags-also\" by\n>> e66ef7ae (Merge branch 'mh/fetch-tags-in-addition-to-normal-refs',\n>> 2013-12-12).  Perhaps we should do the same on the push side.\n>\n> Would we still have a way to push tags only with this?\n>\n> fetch and push are a bit different: it's almost never a bad idea to run\n> fetch (I see remote-tracking as a kind of cache, and fetch is the way to\n> refresh this cache), but pushing too much can be harmful. Not a strong\n> objection, but I'm not sure that this change is 100% safe for everyone.\n\nYeah, a possible fallout can be seen in the updates to the tests in\nthis patch.  I am undecided if \"pushing can be harmful\" should trump\n\"--tags should behave in a similar way for fetch and push that are\nthe reverse of each other\".\n\nIf we are to introduce --tags-also (or --tags-too), we should add it\nto fetch, too.\n\n\n-- >8 --\nSubject: [PATCH] push --tags: push tags *in addition to* other stuff\n\nEarlier, we changed \"git fetch --tags\" from \"fetch all tags instead\nof what we would fetch without --tags argument\" to \"fetch all tags\nin addition to what we would fetch without --tags argument\" with\nc5a84e92 (fetch --tags: fetch tags *in addition to* other stuff,\n2013-10-30), which was merged as a part of a series at e66ef7ae.\n\nThis does the same to \"git push --tags\"; instead of pushing all tags\n(and nothing else, as the command line does not have any other\nrefspec), the command now pushes all tags in addition to what \"git\npush\" would have pushed.\n\nThe changes to the tests shows a possible fallout.  Both of them do\nnot set up the default push refspec, causing \"git push\" without any\nrefspecs on the command line to fail, which was OK because they do\nnot intend to do \"git push\" without any explicit refspec on the\ncommand line.  But now \"--tags\" no longer is considered an explicit\nrefspec, the logic to find the refs to be pushed by default is\ntriggered to find what \"other stuff\" needs to be pushed, and causes\nthe \"git push --tags\" to fail.  As it is to push tags and nothing\nelse what these pushes want to do, replace these \"git push --tags\"\ninvocations with \"git push\" with an explicit \"refs/tags/\\*\" refspec.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n builtin/push.c                   | 18 ++++++++++--------\n t/t5509-fetch-push-namespaces.sh |  2 +-\n t/t5516-fetch-push.sh            |  2 +-\n 3 files changed, 12 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/push.c b/builtin/push.c\nindex 57c138b..ec215d7 100644\n--- a/builtin/push.c\n+++ b/builtin/push.c\n@@ -382,7 +382,7 @@ static int push_with_options(struct transport *transport, int flags)\n \treturn 1;\n }\n \n-static int do_push(const char *repo, int flags)\n+static int do_push(const char *repo, int flags, int tags_too)\n {\n \tint i, errs;\n \tstruct remote *remote = pushremote_get(repo);\n@@ -429,6 +429,10 @@ static int do_push(const char *repo, int flags)\n \t\t} else if (!(flags & TRANSPORT_PUSH_MIRROR))\n \t\t\tsetup_default_push_refspecs(remote);\n \t}\n+\n+\tif (tags_too)\n+\t\tadd_refspec(\"refs/tags/*\");\n+\n \terrs = 0;\n \turl_nr = push_url_of_remote(remote, &url);\n \tif (url_nr) {\n@@ -494,7 +498,7 @@ static int git_push_config(const char *k, const char *v, void *cb)\n int cmd_push(int argc, const char **argv, const char *prefix)\n {\n \tint flags = 0;\n-\tint tags = 0;\n+\tint tags_too = 0;\n \tint rc;\n \tconst char *repo = NULL;\t/* default repository */\n \tstruct option options[] = {\n@@ -504,7 +508,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)\n \t\tOPT_BIT( 0 , \"mirror\", &flags, N_(\"mirror all refs\"),\n \t\t\t    (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE)),\n \t\tOPT_BOOL( 0, \"delete\", &deleterefs, N_(\"delete refs\")),\n-\t\tOPT_BOOL( 0 , \"tags\", &tags, N_(\"push tags (can't be used with --all or --mirror)\")),\n+\t\tOPT_BOOL( 0 , \"tags\", &tags_too, N_(\"push tags (can't be used with --all or --mirror)\")),\n \t\tOPT_BIT('n' , \"dry-run\", &flags, N_(\"dry run\"), TRANSPORT_PUSH_DRY_RUN),\n \t\tOPT_BIT( 0,  \"porcelain\", &flags, N_(\"machine-readable output\"), TRANSPORT_PUSH_PORCELAIN),\n \t\tOPT_BIT('f', \"force\", &flags, N_(\"force updates\"), TRANSPORT_PUSH_FORCE),\n@@ -535,20 +539,18 @@ int cmd_push(int argc, const char **argv, const char *prefix)\n \tgit_config(git_push_config, &flags);\n \targc = parse_options(argc, argv, prefix, options, push_usage, 0);\n \n-\tif (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))\n+\tif (deleterefs &&\n+\t    (tags_too || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))\n \t\tdie(_(\"--delete is incompatible with --all, --mirror and --tags\"));\n \tif (deleterefs && argc < 2)\n \t\tdie(_(\"--delete doesn't make sense without any refs\"));\n \n-\tif (tags)\n-\t\tadd_refspec(\"refs/tags/*\");\n-\n \tif (argc > 0) {\n \t\trepo = argv[0];\n \t\tset_refspecs(argv + 1, argc - 1, repo);\n \t}\n \n-\trc = do_push(repo, flags);\n+\trc = do_push(repo, flags, tags_too);\n \tif (rc == -1)\n \t\tusage_with_options(push_usage, options);\n \telse\ndiff --git a/t/t5509-fetch-push-namespaces.sh b/t/t5509-fetch-push-namespaces.sh\nindex cc0b31f..2f9b0f0 100755\n--- a/t/t5509-fetch-push-namespaces.sh\n+++ b/t/t5509-fetch-push-namespaces.sh\n@@ -30,7 +30,7 @@ test_expect_success 'pushing into a repository using a ref namespace' '\n \t\tgit ls-remote pushee-namespaced >actual &&\n \t\tprintf \"$commit1\\trefs/heads/master\\n\" >expected &&\n \t\ttest_cmp expected actual &&\n-\t\tgit push pushee-namespaced --tags &&\n+\t\tgit push pushee-namespaced \"refs/tags/*\" &&\n \t\tgit ls-remote pushee-namespaced >actual &&\n \t\tprintf \"$commit0\\trefs/tags/0\\n\" >>expected &&\n \t\tprintf \"$commit1\\trefs/tags/1\\n\" >>expected &&\ndiff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh\nindex 8a5f236..9d54186 100755\n--- a/t/t5516-fetch-push.sh\n+++ b/t/t5516-fetch-push.sh\n@@ -802,7 +802,7 @@ test_expect_success 'allow deleting a ref using --delete' '\n test_expect_success 'allow deleting a tag using --delete' '\n \tmk_test testrepo heads/master &&\n \tgit tag -a -m dummy_message deltag heads/master &&\n-\tgit push testrepo --tags &&\n+\tgit push testrepo \"refs/tags/*\" &&\n \t(cd testrepo && git rev-parse --verify -q refs/tags/deltag) &&\n \tgit push testrepo --delete tag deltag &&\n \t(cd testrepo && test_must_fail git rev-parse --verify refs/tags/deltag)\n-- \n2.4.2-540-gc413a76\n"},{"id":"262801","messageId":"xmqq6175zn70.fsf_-_@gitster.dls.corp.google.com","threadId":"39453","inReplyTo":"vpqoal3p8wo.fsf@anie.imag.fr","subject":"Re: Not a BUG: For first push to a bare repo, using \"--tags\" prevents creation of master branch","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-06-02T23:48:35Z","receivedAt":"2015-06-02T23:48:35Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:\n\n> Junio C Hamano <gitster@pobox.com> writes:\n>\n>> I recall \"fetch --tags\" was updated to become your \"--tags-also\" by\n>> e66ef7ae (Merge branch 'mh/fetch-tags-in-addition-to-normal-refs',\n>> 2013-12-12).  Perhaps we should do the same on the push side.\n>\n> Would we still have a way to push tags only with this?\n>\n> fetch and push are a bit different: it's almost never a bad idea to run\n> fetch (I see remote-tracking as a kind of cache, and fetch is the way to\n> refresh this cache), but pushing too much can be harmful. Not a strong\n> objection, but I'm not sure that this change is 100% safe for everyone.\n\nWhether the user is familiar with \"git fetch --tags\" or not, \"git\npush --tags\" that is not spelled as \"git push 'tags/*'\" does look\nlike an option that augments what the command normally does, and the\n\"mistaken\" (non-)bug report was very understandable. \n\nAfter having thought about this, I would say that it would not add\nmuch value to the system if we add it as \"git push --tags-also\".  We\nshould either keep the current semantics as-is, or we replace \"git\npush --tags\" to make it similar to what \"git fetch --tags\" does, I\nthink.\n"}]}