On Thu, 16 Nov 2006, Han-Wen Nienhuys wrote: > > This is not about CVS or SVN, so don't put them up as a strawman. > If you want to argue that my brain is warped, use other distributed VCs as an > example. Your example has nothing at all to do with "pull" vs "fetch", though. Your example is about something totally _different_, namely that under git, "git init-db" is _only_ for creating a _new_ project. > The following > > mkdir x y > cd x > hg init > echo hoi > bla > hg add > hg commit -m 'yes, I am also too stupid to refuse explicit empty commit messages' > cd ../y > hg init > hg pull ../x > > pretty much works the same in Darcs, bzr and mercurial. > > With GIT, this is what happens > > [hanwen@haring y]$ git pull ../x Bzzt. This is where you went wrong, and you blamed "pull". The way you do this in git is to NOT do "git init". Instead, you replace all the mkdir y cd ../y hg init hg pull ../x with a simple git clone x y and YOU ARE DONE. Now, we could certainly _make_ "git pull" work on an empty git project, but that has _nothing_ to do with what people have been talking about. In fact, the fact that "git fetch" kind of works is not exactly accidental (because "git fetch" _is_ meant to add new local branches too), but all the problems you have with it are due to the SAME issue. You started without any branch at all, because you started with an empty git repo, and you're simply not _supposed_ to do that. So current rule (and this is not new, it's always been true): the ONLY time you use "git init-db" is when you are going to start a totally new project. Never _ever_ otherwise. If you want to track another project, use "git clone". > This might not be typical GIT use, but it does show the typical GIT user > experience, at least mine. It's not that it isn't typical, it's that you are using the wrong model. Maybe it's not well documented, I can easily give you that, but ALL your problems come from that fundamental starting point: you shouldn't have used "git init-db" in the first place. Somebody want to document it? Alternatively, we certainly _could_ make "git pull" just accept an empty git repo, and make it basically create the current branch. (And we probably should improve the error messahe) > I don't want ANYTHING to really change, I just want a sane interface to it. The sane interface _exists_. It's called "git clone". Linus - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html