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

Re: git push

From
John Tapsell <johnflux@gmail.com>
Date
Mar 5, 2009, 08:56 UTC
Message-ID
<43d8ce650903050056v4b7a22cfve2eb4d8d76717285@mail.gmail.com>
In-Reply-To
<49AF9117.1020407@op5.se>
2009/3/5 Andreas Ericsson <ae@op5.se>:
Show 58 quoted lines
> Finn Arne Gangstad wrote:
>>
>> Sorry to people receiving this mail twice, the list ate my first reply
>> since it managed to hit the spam-filter (maybe I should take a hint... :)
>>
>> On Tue, Feb 24, 2009 at 11:01:38PM -0800, Junio C Hamano wrote:
>>>
>>> [...]
>>>
>>> But if you are talking about changing the default when "git push" is run
>>> without any parameter, I have to say it is a terrible idea, for two
>>> reasons, and one is too obvious to state so I wouldn't repeat it and talk
>>> only about the other one.
>>
>> The current default behaviour of git push is very annoying for us at
>> least. The current behaviour is _dangerous_ and leads to serious
>> problems. It is too easy for someone to write "git push". They hit
>> enter too soon, or they write it expecting to get usage
>> information. They do not necessarily expect to overwrite random
>> branches in a remote repository.
>>
>> Most git commands are not destructive with no arguments at all, and
>> push is the _only_ command that really can screw things up for others,
>> so this command in particular should refrain from destructive default
>> behaviour.
>>
>> An example of random branch overwriting:
>> $ mkdir a
>> $ cd a
>> $ git init
>> $ echo contents > file
>> $ git add file
>> $ git commit -m message
>> $ cd ..
>> $ git clone a b
>> $ cd b
>> $ git checkout -b gif-support
>> $ echo foo > somefile
>> $ git add somefile
>> $ git commit -m message
>> $ ( cd ../a && git branch gif-support) # Assume done by someone else
>> $ git checkout master
>> $ # <hack away, maybe commit a bit>
>> $ git push  # <-- OOOPS! pushes gif-support!
>>
>> Notice that what branches git push ends up pushing is out of your
>> control, since new branches can appear in the remote repository at any
>> time. This is very unfriendly in our setup with a shared incoming repo.
>>
>> If developer A creates "gif-support", shares it with developer B, who
>> does an additional commit on it to make it print more debug info (but
>> has no intent of pushing it anywhere), and A pushes it to the "incoming"
>> repo, developer B risks overwriting that with his debug version.
>>
>
> git push will never overwrite changes in the remote repo unless you
> specify --force. If anyone *blindly* uses --force, they really shouldn't
> have write-access to anything so precious as your code repositories.
It's seems a very likely scenario to me.

I work on a remote branch with one other person, to make some new feature. Once we are done, I rebase and get rid of the cruft from the history, then "git push --force" to update the branch. Whoops, I've just unknowingly wiped out a completely different branch.

Show 27 quoted lines
>
> Worst-case scenario, you commits that were never intended for publication
> enter your public wateringhole and needs a revert later on. Big deal.
>
>> It is not realistic to believe that in a big project with many
>> developers, no one will ever do the mistake of typing "git push".  It
>> is also not realistic to believe that everyone will know how to (or
>> remember to) configure this away.
>>
>
> But it *is* realistic to not assume that they will also use --force
> while doing so.
>
>>> If you shoot for the least damage for such people, the sanest default for
>>> "git push" would be to do nothing.  You *always* say what to push where,
>>> then there is no risk of pushing something you did not intend to.
>>>  Perhaps
>>> "push.default = never" configuration may not be such a bad idea?
>>
>> If "git push" could do nothing at all without configuring anything, that
>> would be a big improvement to us.
>>
>
> I can buy this, I guess. I always type the remote-name I want to push to
> anyways. A sane no-op default would probably be to list the pre-configured
> remotes along with a short usage message. I still don't quite see the point
> of it.

If people don't agree on changing 'git push' to affect only the current branch, I would also go for making 'git push' a noop.

John
Show 10 quoted lines
>
> --
> Andreas Ericsson                   andreas.ericsson@op5.se
> OP5 AB                             www.op5.se
> Tel: +46 8-230225                  Fax: +46 8-230231
>
> Considering the successes of the wars on alcohol, poverty, drugs and
> terror, I think we should give some serious thought to declaring war
> on peace.
>
Previous: Andreas EricssonNext: Finn Arne Gangstad
Message 16 of 17 in “git push”
  1. John TapsellFeb 25, 2009
  2. Jeff KingFeb 25, 2009
  3. Junio C HamanoFeb 25, 2009
  4. John TapsellFeb 25, 2009
  5. Junio C HamanoFeb 25, 2009
  6. Jeff KingFeb 25, 2009
  7. Junio C HamanoFeb 25, 2009
  8. Jeff KingFeb 25, 2009
  9. John TapsellFeb 25, 2009
  10. Junio C HamanoFeb 25, 2009
  11. John TapsellFeb 25, 2009
  12. Jay SoffianFeb 25, 2009
  13. Junio C HamanoFeb 25, 2009
  14. Finn Arne GangstadFeb 25, 2009
  15. Andreas EricssonMar 5, 2009
  16. John TapsellMar 5, 2009
  17. Finn Arne GangstadMar 5, 2009

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.