Re: Cleaning up git user-interface warts

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linus Torvalds
Date: Thursday, November 16, 2006 - 5:39 pm

On Fri, 17 Nov 2006, Han-Wen Nienhuys wrote:

Well, a lot of the assymmetries aren't actually gratuitous at all.


As mentioned, in order to "put-clone", you generally have to "create" 
first, so the "put-clone" really makes no sense.

The _true_ reverse is really your

 - "git init-db" on both sides

 - "git pull" (your workflow ;) on receiving

 - "git push" on sending.

The fact that we can do "git clone" on the _receiving_ side is an 
assymmetry, but it's not gratutous: when receiving we don't need any extra 
permissions or setup to create a new archive. In contrast, when sending, 
you do have to have that "get permission to create new archive" phase.


Again, this is not gratuitous, and the reason is very similar: when you 
pull, you're pulling into something that _you_ control and _you_ have 
access to, namely your working directory. In order to merge you have to 
have the ability to fix up conflicts (whether automatically or manually), 
and this is something that you _fundamentally_ can only do when you own 
the repo space.

Again, when you do "push", the reason you can't merge is not a "gratuitous 
assymmetry", but a _fundamental_ assymmetry: by definition, you're pushing 
to a _remote_ thing, and as such you can't merge, because you can't fix up 
any merge problems.

See?

In many ways, if you want _symmetry_, you need to make sure that the 
_cases_ are symmetrical. If you have ssh shell access, you can often do 
that, and the "reverse" of a "git pull" is actually just another "git 
pull" from the other side:

	ssh other-side "cd repo ; git pull back"

Now they really _are_ symmetrical: "git pull" is really in many ways ITS 
OWN reverse operation. 

But "push" and "pull" _fundamentally_ aren't symmetric operations, and you 
simply cannot possibly make them symmetric. Any system that tries would be 
absolutely horrible to use, exactly because it would be either:

 - making local/remote operations totally equivalent

   This sounds like a "good" thing, but from a real user perspective it's 
   actually horribly horribly bad. Knowing the difference between local 
   and remote is what allows a lot of performance optimizations, and a lot 
   of security. Your local repo is _yours_, and nobody can take that away 
   from you, and that's a really fundamental reason for why the symmetry 
   cannot exist, and why local/remote operations MUST NOT be something 
   that you can mix without thinking about them,

 - limit local operations in a way to make them effectively unusable and 
   unscriptable.

   You'd basically have to do everything even _locally_ through some 
   server interface, and you'd not be allowed to ever touch your local 
   checked-out repository directly. Again: local repositories really _are_ 
   special, because you can touch the checked out copy. If you try to 
   suppress that, you're screwed.


As in sending? Sure there is: use "git push --all". It will push out every 
branch (and tag) you have. Add "--force" if you want to make sure that it 
also pushed out branches even if the result isn't a strict superset (of 
course, the receiving end may actually end up refusing to take it, there's 
a option for the receiver to say "I will refuse any update that isn't a 
strict superset of what I had").

If you mean as in "receiving new branches", then yeah, you do have to 
script it, with some fairly trivial "git ls-remote" to make sure you get 
the new remotes.

		Linus
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: Cleaning up git user-interface warts, Jakub Narebski, (Tue Nov 14, 2:30 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Tue Nov 14, 2:34 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Tue Nov 14, 3:56 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Tue Nov 14, 6:48 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Tue Nov 14, 7:10 pm)
Re: Cleaning up git user-interface warts, Michael K. Edwards, (Tue Nov 14, 7:27 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Tue Nov 14, 9:20 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Tue Nov 14, 9:58 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 11:03 am)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 11:43 am)
Re: Cleaning up git user-interface warts, Shawn Pearce, (Wed Nov 15, 11:49 am)
Re: Cleaning up git user-interface warts, Andy Parkins, (Wed Nov 15, 11:58 am)
Re: Cleaning up git user-interface warts, Marko Macek, (Wed Nov 15, 12:05 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 12:18 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 12:32 pm)
Re: Cleaning up git user-interface warts, Michael K. Edwards, (Wed Nov 15, 12:39 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 1:09 pm)
Re: Cleaning up git user-interface warts, Petr Baudis, (Wed Nov 15, 1:12 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 1:21 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 1:26 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 1:40 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 1:41 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 1:50 pm)
Re: Cleaning up git user-interface warts, Carl Worth, (Wed Nov 15, 2:08 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 2:18 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 2:31 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 2:40 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 2:45 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 2:52 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 2:59 pm)
Re: Cleaning up git user-interface warts, Shawn Pearce, (Wed Nov 15, 3:07 pm)
Re: Cleaning up git user-interface warts, Sean, (Wed Nov 15, 3:28 pm)
Re: Cleaning up git user-interface warts, Carl Worth, (Wed Nov 15, 3:52 pm)
Re: Cleaning up git user-interface warts, Shawn Pearce, (Wed Nov 15, 4:02 pm)
Re: Cleaning up git user-interface warts, Sean, (Wed Nov 15, 4:07 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 4:33 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 5:08 pm)
Re: Cleaning up git user-interface warts, Theodore Tso, (Wed Nov 15, 6:14 pm)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Wed Nov 15, 6:20 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 7:03 pm)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Wed Nov 15, 7:30 pm)
Re: Cleaning up git user-interface warts, Michael K. Edwards, (Wed Nov 15, 8:02 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 8:07 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Wed Nov 15, 8:12 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 8:27 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 8:35 pm)
Re: Cleaning up git user-interface warts, Nicolas Pitre, (Wed Nov 15, 8:43 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 9:07 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Wed Nov 15, 9:21 pm)
Re: Cleaning up git user-interface warts, Theodore Tso, (Wed Nov 15, 9:26 pm)
Re: Cleaning up git user-interface warts, Petr Baudis, (Wed Nov 15, 9:30 pm)
Re: Cleaning up git user-interface warts, Marko Macek, (Wed Nov 15, 11:07 pm)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Thu Nov 16, 3:45 am)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Thu Nov 16, 4:11 am)
Re: Cleaning up git user-interface warts, Alexandre Julliard, (Thu Nov 16, 4:34 am)
Re: Cleaning up git user-interface warts, Andreas Ericsson, (Thu Nov 16, 4:35 am)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Thu Nov 16, 4:47 am)
Re: Cleaning up git user-interface warts, Andreas Ericsson, (Thu Nov 16, 4:50 am)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Thu Nov 16, 6:03 am)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Thu Nov 16, 6:11 am)
Re: Cleaning up git user-interface warts, Petr Baudis, (Thu Nov 16, 7:01 am)
Re: Cleaning up git user-interface warts, Alexandre Julliard, (Thu Nov 16, 8:48 am)
Re: Cleaning up git user-interface warts, Theodore Tso, (Thu Nov 16, 9:07 am)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 9:23 am)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 9:30 am)
Re: Cleaning up git user-interface warts, Carl Worth, (Thu Nov 16, 9:37 am)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Thu Nov 16, 9:42 am)
Re: Cleaning up git user-interface warts, Theodore Tso, (Thu Nov 16, 9:49 am)
Re: Cleaning up git user-interface warts, Carl Worth, (Thu Nov 16, 10:01 am)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 10:17 am)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 10:30 am)
multi-project repos (was Re: Cleaning up git user-interfac ..., Han-Wen Nienhuys, (Thu Nov 16, 10:40 am)
Re: Cleaning up git user-interface warts, Sean, (Thu Nov 16, 10:44 am)
Re: Cleaning up git user-interface warts, Michael K. Edwards, (Thu Nov 16, 10:57 am)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 10:57 am)
Re: Cleaning up git user-interface warts, Carl Worth, (Thu Nov 16, 11:13 am)
Re: Cleaning up git user-interface warts, Carl Worth, (Thu Nov 16, 11:23 am)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Thu Nov 16, 11:27 am)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 11:28 am)
Re: multi-project repos, Junio C Hamano, (Thu Nov 16, 11:33 am)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Thu Nov 16, 12:47 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 12:53 pm)
Re: multi-project repos (was Re: Cleaning up git user-inte ..., Johannes Schindelin, (Thu Nov 16, 3:21 pm)
Re: multi-project repos, Junio C Hamano, (Thu Nov 16, 3:44 pm)
Re: Cleaning up git user-interface warts, Johannes Schindelin, (Thu Nov 16, 4:00 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 4:22 pm)
Re: multi-project repos (was Re: Cleaning up git user-inte ..., Johannes Schindelin, (Thu Nov 16, 4:36 pm)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Thu Nov 16, 5:05 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Thu Nov 16, 5:13 pm)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Thu Nov 16, 5:27 pm)
Re: multi-project repos, Johannes Schindelin, (Thu Nov 16, 5:29 pm)
Re: Cleaning up git user-interface warts, Petr Baudis, (Thu Nov 16, 5:35 pm)
Re: Cleaning up git user-interface warts, Carl Worth, (Thu Nov 16, 5:37 pm)
Re: Cleaning up git user-interface warts, Linus Torvalds, (Thu Nov 16, 5:39 pm)
Re: Cleaning up git user-interface warts, Han-Wen Nienhuys, (Thu Nov 16, 5:52 pm)
Re: multi-project repos (was Re: Cleaning up git user-inte ..., Johannes Schindelin, (Thu Nov 16, 6:22 pm)
Re: Cleaning up git user-interface warts, Carl Worth, (Thu Nov 16, 6:25 pm)
Re: Cleaning up git user-interface warts, Michael K. Edwards, (Thu Nov 16, 6:34 pm)
Re: multi-project repos (was Re: Cleaning up git user-inte ..., Johannes Schindelin, (Thu Nov 16, 7:16 pm)
Re: Cleaning up git user-interface warts, Michael K. Edwards, (Thu Nov 16, 11:42 pm)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Fri Nov 17, 12:32 am)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Fri Nov 17, 1:41 am)
Re: Cleaning up git user-interface warts, Carl Worth, (Fri Nov 17, 2:18 am)
Re: Cleaning up git user-interface warts, Johannes Schindelin, (Fri Nov 17, 3:11 am)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Fri Nov 17, 4:29 am)
Re: Cleaning up git user-interface warts, Junio C Hamano, (Fri Nov 17, 4:41 am)
Re: Cleaning up git user-interface warts, Karl , (Fri Nov 17, 5:20 am)
Re: Cleaning up git user-interface warts, Shawn Pearce, (Fri Nov 17, 9:58 am)
Re: multi-project repos, Junio C Hamano, (Fri Nov 17, 10:39 am)
Re: multi-project repos, Junio C Hamano, (Fri Nov 17, 1:24 pm)
Re: Cleaning up git user-interface warts, Michael K. Edwards, (Fri Nov 17, 6:24 pm)
Re: multi-project repos, Shawn Pearce, (Fri Nov 17, 11:02 pm)
Re: multi-project repos, Junio C Hamano, (Sat Nov 18, 12:31 am)
Re: multi-project repos, Shawn Pearce, (Sat Nov 18, 12:45 am)
Re: Cleaning up git user-interface warts , Horst H. von Brand, (Mon Nov 20, 12:44 pm)
Re: Cleaning up git user-interface warts, Shawn Pearce, (Mon Nov 20, 12:46 pm)
Re: Cleaning up git user-interface warts, Jerome Lovy, (Tue Nov 21, 6:25 am)
Re: Cleaning up git user-interface warts , Sanjoy Mahajan, (Wed Nov 22, 4:21 pm)
Re: Cleaning up git user-interface warts , Horst H. von Brand, (Wed Nov 22, 7:52 pm)