git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/8] push: change push to fail if short ref name does not exist

From
Steffen Prohaska <prohaska@zib.de>
Date
Oct 28, 2007, 08:43 UTC
Message-ID
<9C8E1C6D-8DC1-4B32-AB78-1D97D3F44447@zib.de>
In-Reply-To
<7vabq3wvd6.fsf@gitster.siamese.dyndns.org>
On Oct 28, 2007, at 8:28 AM, Junio C Hamano wrote:
Show 13 quoted lines
> Steffen Prohaska <prohaska@zib.de> writes:
>
>> You can use a branch's shortname to push it. Push used to create
>> the branch on the remote side if it did not yet exist. If you
>> specified the wrong branch accidentally it was created. A safety
>> valve that pushes only existing branches may help to avoid
>> errors.
>
> I do not agree with this change.
>
> If you misspelled the branch name (by the way, it is not a
> "shortname", but what follows refs/heads/ is _the_ name of the
> branch)
True. Is "short refname" the correct wording?
Show 9 quoted lines
> "frotz" as "frtoz", and if a branch with the misspelled
> name did _not_ exist locally, it would fail, with or without
> this change, which is a good thing.
>
> But if you named "nitfol" that exists locally when you meant to
> push "frotz" out, if "nitfol" remotely existed, we will push
> that anyway by mistake, even with this change.  It will prevent
> the push only when "nitfol" did not happen to exist at the
> remote side.

My proposed change is more defensive than the current implementation. It allows distinguishing between "push existing branch" and "create new branch on the remote side", which I believe is a good thing. The current implementation uses the same command line in both cases.

Daniel suggested that git push should print a recommendation what full ref to use. This would make it easy to correct the command. Ot you could use the '--create' flag to make your intention explicit.

If we take the "push origin HEAD" patch, the existence check is even more important. If you're on the wrong branch and push HEAD you may be surprised if a new branch is created. This can be avoided by requiring either a full ref or the '--create' flag.

Show 6 quoted lines
> Earlier there was a discussion to introduce an optional
> configuration that makes "git push" without any parameter to
> push only the current branch out, in order to help people who
> work with shared remote central repository.  That might be a
> better alternative to avoid pushing out wrong branch by
> mistake.  That approach would also make your 8/8 unnecessary.

I didn't have the impression that the discussion went in this direction. There were quite a few people who just said "git push" is the counter-part of "git fetch". Therefore "git push" pushes _all_ branches. Period.

With "git push HEAD" 5/8 you could now push only the current branch (its existence would be verified if 1/8 is also accepted).

8/8 solves a different issue, too. I never advance local branches if I do not intend to push them. Therefore I can always say "git push" without any argument. It does always the right thing for me; except for the annoying error messages that are avoided by 8/8. With 8/8 I can push several local branches while ignoring the ones that I'm not interested in.

	Steffen
Previous: Junio C Hamano
Message 36 of 36 in “improve push's refspec handling”
  1. 0/8 improve push's refspec handlingSteffen Prohaska, Oct 27, 2007
  2. 1/8 push: change push to fail if short ref name does not existSteffen Prohaska, Oct 27, 2007
  3. 2/8 push: teach push new flag --createSteffen Prohaska, Oct 27, 2007
  4. 3/8 add get_sha1_with_real_ref() returning full name of ref on demandSteffen Prohaska, Oct 27, 2007
  5. 4/8 rev-parse: teach "git rev-parse --symbolic" to print the full ref nameSteffen Prohaska, Oct 27, 2007
  6. 5/8 push, send-pack: support pushing HEAD to real ref nameSteffen Prohaska, Oct 27, 2007
  7. 6/8 add ref_cmp_full_short() comparing full ref name with a short nameSteffen Prohaska, Oct 27, 2007
  8. 7/8 push: use same rules as git-rev-parse to resolve refspecsSteffen Prohaska, Oct 27, 2007
  9. 8/8 push: teach push to be quiet if local ref is strict subset of remote refSteffen Prohaska, Oct 27, 2007
  10. Junio C HamanoOct 28, 2007
  11. Steffen ProhaskaOct 28, 2007
  12. Junio C HamanoOct 28, 2007
  13. Daniel BarkalowOct 27, 2007
  14. Junio C HamanoOct 28, 2007
  15. Daniel BarkalowOct 27, 2007
  16. Junio C HamanoOct 28, 2007
  17. Steffen ProhaskaOct 28, 2007
  18. Steffen ProhaskaOct 28, 2007
  19. Junio C HamanoOct 28, 2007
  20. Steffen ProhaskaOct 28, 2007
  21. Junio C HamanoOct 28, 2007
  22. Steffen ProhaskaOct 28, 2007
  23. Junio C HamanoOct 28, 2007
  24. Steffen ProhaskaOct 31, 2007
  25. Daniel BarkalowOct 27, 2007
  26. Steffen ProhaskaOct 28, 2007
  27. Junio C HamanoOct 28, 2007
  28. Steffen ProhaskaOct 28, 2007
  29. Shawn O. PearceOct 28, 2007
  30. Steffen ProhaskaOct 28, 2007
  31. Brian GernhardtOct 28, 2007
  32. Junio C HamanoOct 28, 2007
  33. Junio C HamanoOct 28, 2007
  34. Daniel BarkalowOct 27, 2007
  35. Junio C HamanoOct 28, 2007
  36. Steffen ProhaskaOct 28, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.