Hi, On Wed, 24 Oct 2007, Steffen Prohaska wrote:I am more concerned about having very fuzzy meanings of our nomenclature. As of now, "pull = fetch + merge". You want to change that, and I am sure that it is harder to explain, Andreas' insistence on my being wrong notwithstanding. Whenever I told people "pull = fetch + merge", they got it. Often I would start a talk about git by introducing distributed development. By stating that working in a working directory is already forking, only without commiting. Then I'd go into details, by saying that there are multiple repositories, and that you can update local copies of the remote branches by "git fetch". And you can merge by "git merge". And then I would write down on the blackboard -- the first written thing in my talk! -- pull = fetch + merge. My "pupils" _always_ liked the preciseness of the nomenclature. And they made many less mistakes because they had a clear mental model of what is remote, and what is local. And that local branches are always forks. And here I have to disagree strongly. In a workflow based on a shared repository, you do not want to merge. You want to rebase. First thing you do when switching to another branch is fetch + rebase (that's why I want an option to "pull --rebase" other branches). But _even if_ you merge instead of rebase, I fail to see how the current situation is different from CVS (which many people maintain is _easier_ than gi), where first thing you do is to "cvs update". Just for git it is "git pull". But I think I have to drive my message home again: if what you desire becomes reality, you take away the clear distinction between local and remote branches. In fact, those branches are neither local (because the next pull will automatically update them with remote changes, but _only_ if they fast-forward) nor remote (because you plan to work on them locally). But here is a proposal which should make you and your developers happy, _and_ should be even easier to explain: Work with topic branches. And when you're done, delete them. So the beginning of the day could look like this: git fetch git checkout -b todays-topic origin/master [hack hack hack] [test test test] [debug debug debug] [occasionally commit] [occasionally git rebase -i origin/master] and the end of the topic git branch -M master git push origin master If you should not be ready to push by the end of the day, no need to worry. Just stay on that topic branch, and before pushing, do git fetch git rebase origin/master In _every_ case where I explained git, I found that people appreciated the two-step procedures (like you will find in the examples I showed you above): one git command to work locally, and one to push/fetch to/from origin. Ciao, Dscho - 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
| David Miller | Re: Slow DOWN, please!!! |
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Heiko Carstens | Re: -mm merge plans for 2.6.23 -- sys_fallocate |
git: | |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | [GIT]: Networking |
| Jan Engelhardt | Re: iptables very slow after commit 784544739a25c30637397ace5489eeb6e15d7d49 |
