* pull into dirty working tree
@ 2007-06-13 14:14 Bill Lear
2007-06-13 14:38 ` Pierre Habouzit
` (4 more replies)
0 siblings, 5 replies; 43+ messages in thread
From: Bill Lear @ 2007-06-13 14:14 UTC (permalink / raw)
To: git
We have some CVS users who complain that they cannot do a pull
into a dirty working tree, as they could under CVS. Here is
their scenario: they make a few changes to their code and want
to test it out; someone else pushes changes to the central repo
that they then want to add to their working tree to test also;
they then want to pull in these changes and test everything, as
if they had done 'mv stuff stuff-; git pull; mv stuff- stuff'.
They would like an option (perhaps a config option) to do a "dirty
pull".
The git-merge documentation states:
You may have local modifications in the working tree files. In other
words, git-diff is allowed to report changes. However, the merge uses
your working tree as the working area, and in order to prevent the
merge operation from losing such changes, it makes sure that they do
not interfere with the merge. Those complex tables in read-tree
documentation define what it means for a path to "interfere with the
merge". And if your local modifications interfere with the merge,
again, it stops before touching anything.
But my colleagues are still wondering: why can't git just do it as
CVS does?
I know there are workarounds: I myself documented a set of commands
to "put things on a shelf", but they still are whining.
I need a convincing argument: not a technical one, but one that is
practical (e.g. where CVS would do harm that git is preventing).
So, any explanation that I can give them why we can't have a 'git pull
--dirty' that moves things out of the way, then does the merge, then
moves thing back, aside from that it is stupid?
Bill
^ permalink raw reply [flat|nested] 43+ messages in thread* Re: pull into dirty working tree 2007-06-13 14:14 pull into dirty working tree Bill Lear @ 2007-06-13 14:38 ` Pierre Habouzit 2007-06-13 14:43 ` Pierre Habouzit 2007-06-13 14:45 ` Bill Lear 2007-06-13 15:01 ` Randal L. Schwartz ` (3 subsequent siblings) 4 siblings, 2 replies; 43+ messages in thread From: Pierre Habouzit @ 2007-06-13 14:38 UTC (permalink / raw) To: Bill Lear; +Cc: git [-- Attachment #1: Type: text/plain, Size: 2697 bytes --] On Wed, Jun 13, 2007 at 09:14:32AM -0500, Bill Lear wrote: > We have some CVS users who complain that they cannot do a pull > into a dirty working tree, as they could under CVS. Here is > their scenario: they make a few changes to their code and want > to test it out; someone else pushes changes to the central repo > that they then want to add to their working tree to test also; > they then want to pull in these changes and test everything, as > if they had done 'mv stuff stuff-; git pull; mv stuff- stuff'. > > They would like an option (perhaps a config option) to do a "dirty > pull". > > The git-merge documentation states: > > You may have local modifications in the working tree files. In other > words, git-diff is allowed to report changes. However, the merge uses > your working tree as the working area, and in order to prevent the > merge operation from losing such changes, it makes sure that they do > not interfere with the merge. Those complex tables in read-tree > documentation define what it means for a path to "interfere with the > merge". And if your local modifications interfere with the merge, > again, it stops before touching anything. > > But my colleagues are still wondering: why can't git just do it as > CVS does? > > I know there are workarounds: I myself documented a set of commands > to "put things on a shelf", but they still are whining. > > I need a convincing argument: not a technical one, but one that is > practical (e.g. where CVS would do harm that git is preventing). > > So, any explanation that I can give them why we can't have a 'git pull > --dirty' that moves things out of the way, then does the merge, then > moves thing back, aside from that it is stupid? I suppose the following way would work: $ git commit -a -m "temporary commit" # save current work $ git branch -f dirty # ..in a separate branch $ git reset --hard HEAD~1 # unwind this commit $ git pull # perform a clean pull $ git rebase master dirty # rewrite the work <you may have to fix some conficts here> $ git reset master # "undo" the commit So that's definitely doable. Though, in git, if you really work in a "pure" git environment, you never pull until your work in your topic branch is ready for a merge. It's a very bad habit to do otherwise: you don't _need_ to pull until you have a clean slate. -- ·O· Pierre Habouzit ··O madcoder@debian.org OOO http://www.madism.org [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:38 ` Pierre Habouzit @ 2007-06-13 14:43 ` Pierre Habouzit 2007-06-13 14:47 ` Pierre Habouzit 2007-06-13 14:45 ` Bill Lear 1 sibling, 1 reply; 43+ messages in thread From: Pierre Habouzit @ 2007-06-13 14:43 UTC (permalink / raw) To: Bill Lear, git [-- Attachment #1: Type: text/plain, Size: 2752 bytes --] On Wed, Jun 13, 2007 at 04:38:45PM +0200, Pierre Habouzit wrote: > On Wed, Jun 13, 2007 at 09:14:32AM -0500, Bill Lear wrote: > > We have some CVS users who complain that they cannot do a pull > > into a dirty working tree, as they could under CVS. Here is > > their scenario: they make a few changes to their code and want > > to test it out; someone else pushes changes to the central repo > > that they then want to add to their working tree to test also; > > they then want to pull in these changes and test everything, as > > if they had done 'mv stuff stuff-; git pull; mv stuff- stuff'. > > > > They would like an option (perhaps a config option) to do a "dirty > > pull". > > > > The git-merge documentation states: > > > > You may have local modifications in the working tree files. In other > > words, git-diff is allowed to report changes. However, the merge uses > > your working tree as the working area, and in order to prevent the > > merge operation from losing such changes, it makes sure that they do > > not interfere with the merge. Those complex tables in read-tree > > documentation define what it means for a path to "interfere with the > > merge". And if your local modifications interfere with the merge, > > again, it stops before touching anything. > > > > But my colleagues are still wondering: why can't git just do it as > > CVS does? > > > > I know there are workarounds: I myself documented a set of commands > > to "put things on a shelf", but they still are whining. > > > > I need a convincing argument: not a technical one, but one that is > > practical (e.g. where CVS would do harm that git is preventing). > > > > So, any explanation that I can give them why we can't have a 'git pull > > --dirty' that moves things out of the way, then does the merge, then > > moves thing back, aside from that it is stupid? > > I suppose the following way would work: > > $ git commit -a -m "temporary commit" # save current work > $ git branch -f dirty # ..in a separate branch > $ git reset --hard HEAD~1 # unwind this commit > $ git pull # perform a clean pull > $ git rebase master dirty # rewrite the work > <you may have to fix some conficts here> > $ git reset master # "undo" the commit okay this is wrong because you would then "live" in the `dirty` branch. So you'd have to do sth like: git checkout master git diff master..dirty | git apply -- ·O· Pierre Habouzit ··O madcoder@debian.org OOO http://www.madism.org [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:43 ` Pierre Habouzit @ 2007-06-13 14:47 ` Pierre Habouzit 0 siblings, 0 replies; 43+ messages in thread From: Pierre Habouzit @ 2007-06-13 14:47 UTC (permalink / raw) To: Bill Lear, git [-- Attachment #1: Type: text/plain, Size: 1460 bytes --] On Wed, Jun 13, 2007 at 04:43:11PM +0200, Pierre Habouzit wrote: > On Wed, Jun 13, 2007 at 04:38:45PM +0200, Pierre Habouzit wrote: > > I suppose the following way would work: > > > > $ git commit -a -m "temporary commit" # save current work > > $ git branch -f dirty # ..in a separate branch > > $ git reset --hard HEAD~1 # unwind this commit > > $ git pull # perform a clean pull > > $ git rebase master dirty # rewrite the work > > <you may have to fix some conficts here> > > > $ git reset master # "undo" the commit > > okay this is wrong because you would then "live" in the `dirty` > branch. So you'd have to do sth like: > > git checkout master > git diff master..dirty | git apply Alternatively and definitely shorter: $ git commit -a -m "temporary commit" # save the current work $ git checkout -f -b dirty HEAD~1 # have a dirty branch for the pull $ git pull # perform the pull $ git rebase dirty master # rewrite the work <you may have to fix some conficts here> $ git reset HEAD~1 # then unwind the commit -- ·O· Pierre Habouzit ··O madcoder@debian.org OOO http://www.madism.org [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:38 ` Pierre Habouzit 2007-06-13 14:43 ` Pierre Habouzit @ 2007-06-13 14:45 ` Bill Lear 2007-06-13 14:53 ` Pierre Habouzit 1 sibling, 1 reply; 43+ messages in thread From: Bill Lear @ 2007-06-13 14:45 UTC (permalink / raw) To: Pierre Habouzit; +Cc: git [Pierre writes:] > I suppose the following way would work: > > $ git commit -a -m "temporary commit" # save current work > $ git branch -f dirty # ..in a separate branch > $ git reset --hard HEAD~1 # unwind this commit > $ git pull # perform a clean pull > $ git rebase master dirty # rewrite the work > <you may have to fix some conficts here> > $ git reset master # "undo" the commit > > So that's definitely doable. > > Though, in git, if you really work in a "pure" git environment, you >never pull until your work in your topic branch is ready for a merge. >It's a very bad habit to do otherwise: you don't _need_ to pull until >you have a clean slate. I know, but I can't throw git purity at them as an explanation, they won't understand. And they would disagree about the "need" to pull. That's for them to say: they WANT to pull without having to move aside the makefile that they modified to add the '-wingit' option to the compile line and just get on with their work without having to run 14 different git commands. I'm not trying to justify their habits, but to try to see if there is any clinching reason why this habit is not only "bad", but positively harmful. Bill ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:45 ` Bill Lear @ 2007-06-13 14:53 ` Pierre Habouzit 0 siblings, 0 replies; 43+ messages in thread From: Pierre Habouzit @ 2007-06-13 14:53 UTC (permalink / raw) To: Bill Lear; +Cc: git [-- Attachment #1: Type: text/plain, Size: 2713 bytes --] On Wed, Jun 13, 2007 at 09:45:28AM -0500, Bill Lear wrote: > [Pierre writes:] > > I suppose the following way would work: > > > > $ git commit -a -m "temporary commit" # save current work > > $ git branch -f dirty # ..in a separate branch > > $ git reset --hard HEAD~1 # unwind this commit > > $ git pull # perform a clean pull > > $ git rebase master dirty # rewrite the work > > <you may have to fix some conficts here> > > $ git reset master # "undo" the commit > > > > So that's definitely doable. > > > > Though, in git, if you really work in a "pure" git environment, you > >never pull until your work in your topic branch is ready for a merge. > >It's a very bad habit to do otherwise: you don't _need_ to pull until > >you have a clean slate. > > I know, but I can't throw git purity at them as an explanation, they > won't understand. And they would disagree about the "need" to pull. > That's for them to say: they WANT to pull without having to move aside > the makefile that they modified to add the '-wingit' option to the > compile line and just get on with their work without having to run 14 > different git commands. > > I'm not trying to justify their habits, but to try to see if there is > any clinching reason why this habit is not only "bad", but positively > harmful. If it's because they have local modifications that match their use and are not meant to be commited then I'd say that leaving it as "unclean" work is a bad idea, because one day or the other they will have to modify this Makefile to add a thing to commit for real. and then, 99 times over 100 they will commit their local modification too. _that_ is harmful. And usually there is very soon a new commit to remove the local change. I have a project where we had .htaccess that people had to customize to have their local checkout work in the devel web server setup. It was always commited (wrongly). We weren't using git. To solve those issues, there is many ways, not all are very handy, but it works. The simplest way is to use a repository with a tool like guilt, and each time you commit, you: guilt pop -a (remove your changes) ... do the stuff ... guilt push -a (push your changes again). Maybe you can also have a local branch where you store those local changes. But that's still a bit awkward to use. Maybe someone will come with a better workflow for this. -- ·O· Pierre Habouzit ··O madcoder@debian.org OOO http://www.madism.org [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:14 pull into dirty working tree Bill Lear 2007-06-13 14:38 ` Pierre Habouzit @ 2007-06-13 15:01 ` Randal L. Schwartz 2007-06-13 19:28 ` Alex Riesen 2007-06-13 15:01 ` Johannes Schindelin ` (2 subsequent siblings) 4 siblings, 1 reply; 43+ messages in thread From: Randal L. Schwartz @ 2007-06-13 15:01 UTC (permalink / raw) To: Bill Lear; +Cc: git >>>>> "Bill" == Bill Lear <rael@zopyra.com> writes: Bill> We have some CVS users who complain that they cannot do a pull Bill> into a dirty working tree, as they could under CVS. Here is Bill> their scenario: they make a few changes to their code and want Bill> to test it out; someone else pushes changes to the central repo Bill> that they then want to add to their working tree to test also; Bill> they then want to pull in these changes and test everything, as Bill> if they had done 'mv stuff stuff-; git pull; mv stuff- stuff'. Bill> They would like an option (perhaps a config option) to do a "dirty Bill> pull". Maybe this will do it, presuming they haven't published any of their local work, and they're on a topic branch "topic" git-tag WIP # mark HEAD so we can come back git-commit -a -m WIP # commit current work so we can replay it git-fetch origin # grabs the upstream git-rebase origin # rebase current work-in-progress onto new upstream # might need to resolve and commit conflicts repeatedly git-reset --soft WIP # next commit will be on top of commit prior to rebase git-reset # mark all files as uncommitted as yet git-tag -d WIP # no more need for this tag This effectively puts the upstream changes "under" (or "prior to") the current topic branch. -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training! ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:01 ` Randal L. Schwartz @ 2007-06-13 19:28 ` Alex Riesen 2007-06-13 19:32 ` Randal L. Schwartz 0 siblings, 1 reply; 43+ messages in thread From: Alex Riesen @ 2007-06-13 19:28 UTC (permalink / raw) To: Randal L. Schwartz; +Cc: Bill Lear, git Randal L. Schwartz, Wed, Jun 13, 2007 17:01:14 +0200: > > We have some CVS users who complain that they cannot do a pull > > into a dirty working tree, as they could under CVS. Here is > > their scenario: they make a few changes to their code and want > > to test it out; someone else pushes changes to the central repo > > that they then want to add to their working tree to test also; > > they then want to pull in these changes and test everything, as > > if they had done 'mv stuff stuff-; git pull; mv stuff- stuff'. > > > They would like an option (perhaps a config option) to do a "dirty > > pull". > > Maybe this will do it, presuming they haven't published any of their local > work, and they're on a topic branch "topic" > > git-tag WIP # mark HEAD so we can come back > git-commit -a -m WIP # commit current work so we can replay it > git-fetch origin # grabs the upstream > git-rebase origin # rebase current work-in-progress onto new upstream > # might need to resolve and commit conflicts repeatedly > git-reset --soft WIP # next commit will be on top of commit prior to rebase > git-reset # mark all files as uncommitted as yet > git-tag -d WIP # no more need for this tag > > This effectively puts the upstream changes "under" (or "prior to") the current > topic branch. > Wont work for new files (not yet known to git) which conflict with the same names from origin. Your method will not put them anywhere and their presence will break git-rebase. You _must_ do a merge. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 19:28 ` Alex Riesen @ 2007-06-13 19:32 ` Randal L. Schwartz 2007-06-13 20:47 ` Alex Riesen 0 siblings, 1 reply; 43+ messages in thread From: Randal L. Schwartz @ 2007-06-13 19:32 UTC (permalink / raw) To: Alex Riesen; +Cc: Bill Lear, git >>>>> "Alex" == Alex Riesen <raa.lkml@gmail.com> writes: Alex> Wont work for new files (not yet known to git) which conflict with the Alex> same names from origin. Your method will not put them anywhere and Alex> their presence will break git-rebase. You _must_ do a merge. So I missed git-add for those. Then it'll work. I guess I implied that the git-commit initial step should capture all of the "interesting" state. git-rebase *will* do the merge. It must. :) -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training! ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 19:32 ` Randal L. Schwartz @ 2007-06-13 20:47 ` Alex Riesen 2007-06-13 20:52 ` Randal L. Schwartz 0 siblings, 1 reply; 43+ messages in thread From: Alex Riesen @ 2007-06-13 20:47 UTC (permalink / raw) To: Randal L. Schwartz; +Cc: Bill Lear, git Randal L. Schwartz, Wed, Jun 13, 2007 21:32:35 +0200: > Alex> Wont work for new files (not yet known to git) which conflict with the > Alex> same names from origin. Your method will not put them anywhere and > Alex> their presence will break git-rebase. You _must_ do a merge. > > So I missed git-add for those. Then it'll work. I guess I implied that the > git-commit initial step should capture all of the "interesting" state. No, it wont. What files are you going to add? All, but *.o? All, but *.log? What if user hasn't setup .gitignore yet? What if he meant to add an ignored file anyway? > git-rebase *will* do the merge. It must. :) It won't merge anything which isn't known to git. Now, I come to think about it, no existing merge method will help you here (and very likely it shouldn't). It is actually much simplier doing things right: all this stashing people keep talking about. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 20:47 ` Alex Riesen @ 2007-06-13 20:52 ` Randal L. Schwartz 2007-06-13 21:39 ` Alex Riesen 0 siblings, 1 reply; 43+ messages in thread From: Randal L. Schwartz @ 2007-06-13 20:52 UTC (permalink / raw) To: Alex Riesen; +Cc: Bill Lear, git >>>>> "Alex" == Alex Riesen <raa.lkml@gmail.com> writes: Alex> No, it wont. What files are you going to add? Whatever you are working on. Whatever you want tracked. It's a commit. I'm not sure why you're having trouble following me. What did I leave out? >> git-rebase *will* do the merge. It must. :) Alex> It won't merge anything which isn't known to git. And that's irrelevant, because my first step *did* a commit so they are *known* to git. Alex> Now, I come to think Alex> about it, no existing merge method will help you here (and very likely Alex> it shouldn't). Yes, it should. You're merging your changes onto the upstream. This happens dozens of times a day with git repos all over the world. :) Alex> It is actually much simplier doing things right: all this stashing Alex> people keep talking about. Yes, and that's what I said too. -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training! ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 20:52 ` Randal L. Schwartz @ 2007-06-13 21:39 ` Alex Riesen 2007-06-13 22:01 ` Randal L. Schwartz 0 siblings, 1 reply; 43+ messages in thread From: Alex Riesen @ 2007-06-13 21:39 UTC (permalink / raw) To: Randal L. Schwartz; +Cc: Bill Lear, git Randal L. Schwartz, Wed, Jun 13, 2007 22:52:35 +0200: > Alex> No, it wont. What files are you going to add? > > Whatever you are working on. Whatever you want tracked. It's a commit. > I'm not sure why you're having trouble following me. What did I leave out? You left the process of figuring out what files should be temporarily added to the index. _Automatically_. Because that's what you need if you want "git pull" to just work. Otherwise it just fails. > >> git-rebase *will* do the merge. It must. :) > Alex> It won't merge anything which isn't known to git. > > And that's irrelevant, because my first step *did* a commit so they are > *known* to git. It is not enough. It didn't add the "other" files to index, so the files are _not_ known to git. Imagine you added a file to Makefile (which was known to git), wrote the file, put some code in it, played with it. Never called "git add" on it yet (you were just playing, as original poster suggested). Now someone from team calls and asks you to tests his changes (and imagine he added a file with exactly the same name as yours). You do a pull from his repo and it breaks. With your method it will break too, "git commit -a" wont add your file to index. > Alex> Now, I come to think > Alex> about it, no existing merge method will help you here (and very likely > Alex> it shouldn't). > > Yes, it should. You're merging your changes onto the upstream. This > happens dozens of times a day with git repos all over the world. :) Other way around. You merge upstream in your branch. And it conflicts with work you haven't told git about just yet. > Alex> It is actually much simplier doing things right: all this stashing > Alex> people keep talking about. > > Yes, and that's what I said too. > You (and others) just keep forgetting about this small detail with "other" files. Junio noticed it too. This "small" detail can make the whole stashing bussiness impossible except for maybe a common case. Which is not very helpful for a newbie who meets the uncommon, but his case. He'll learn his way though, of course. After saying out loud: "git sucks!"; which what they already do. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 21:39 ` Alex Riesen @ 2007-06-13 22:01 ` Randal L. Schwartz 2007-06-13 22:27 ` Alex Riesen 0 siblings, 1 reply; 43+ messages in thread From: Randal L. Schwartz @ 2007-06-13 22:01 UTC (permalink / raw) To: Alex Riesen; +Cc: Bill Lear, git >>>>> "Alex" == Alex Riesen <raa.lkml@gmail.com> writes: Alex> You left the process of figuring out what files should be temporarily Alex> added to the index. _Automatically_. Because that's what you need if Alex> you want "git pull" to just work. Otherwise it just fails. I'd just commit *all* of it in my scenerio. There won't be any *other* files. And because of the final git-reset --soft and git-reset, it won't matter if I commited more than I'd ever commit on the final hit. The result of my sequence (I believe) is that my topic commits will appear rebased on top of the new upstream, and that I'll have a dirty working directory that represents things as they were, ready for the next commit. I *lose* the idea of what files were partially added before the last commit, but I can always reconstruct that by hand, because I should already be thinking about that before the next commit. Using those famous trees, if I start with: A--B--C--D origin --E--F--G my_topic --(X) dirty tree and upstream commits P Q R, the result will be: A--B--C--D--P--Q--R origin --E'--F'--G' (E, F, G rebased and merged) my_topic --(X') dirty tree rebased This works because I temporarily make H, which follows E, F, G and then rebase E-F-G-H onto origin, and then simply "uncommit" H'. Oops. I see the problem. I don't need the "WIP" tag. I want to uncommit to G' not to G. Is that what you were referencing? In which case, it's even simpler: git-add . # add *everything* that's not .gitignored git-commit -a -m WIP # save for replay (H above) git-fetch origin # get upstream (P Q R) git-rebase origin # creates E' F' G' H' git-reset --soft HEAD^ # back up to G' git-reset # mark everything un-added as of G' Yeah, this is far easier. -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training! ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 22:01 ` Randal L. Schwartz @ 2007-06-13 22:27 ` Alex Riesen 0 siblings, 0 replies; 43+ messages in thread From: Alex Riesen @ 2007-06-13 22:27 UTC (permalink / raw) To: Randal L. Schwartz; +Cc: Bill Lear, git Randal L. Schwartz, Thu, Jun 14, 2007 00:01:22 +0200: > In which case, it's even simpler: > > git-add . # add *everything* that's not .gitignored > git-commit -a -m WIP # save for replay (H above) > git-fetch origin # get upstream (P Q R) > git-rebase origin # creates E' F' G' H' > git-reset --soft HEAD^ # back up to G' > git-reset # mark everything un-added as of G' > > Yeah, this is far easier. > It is also wrong. You either add a lot of junk (because it is not ignored yet - who'll setup .gitignores just to check something?!) and spend a millenium hashing it (ever tried to add 4.7 DVD?) or it does not add really important files which just happen to be in .gitignore. IOW, this recipe is dangerous. It'll only _mostly_ work. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:14 pull into dirty working tree Bill Lear 2007-06-13 14:38 ` Pierre Habouzit 2007-06-13 15:01 ` Randal L. Schwartz @ 2007-06-13 15:01 ` Johannes Schindelin 2007-06-13 15:40 ` Andy Parkins 2007-06-13 17:13 ` Junio C Hamano 2007-06-14 4:22 ` Daniel Barkalow 2007-06-14 5:21 ` Linus Torvalds 4 siblings, 2 replies; 43+ messages in thread From: Johannes Schindelin @ 2007-06-13 15:01 UTC (permalink / raw) To: Bill Lear; +Cc: git Hi, On Wed, 13 Jun 2007, Bill Lear wrote: > We have some CVS users who complain that they cannot do a pull > into a dirty working tree, as they could under CVS. Two things you can do. First thing is: teach them to commit first. If they decide later that they did not want that change, they still can go back with "git reset HEAD@{2}". The other thing, if you have to, is to put all dirty changes into the index before pull. Something like "git add $(git ls-files --modified)". You can even make that a global alias for your users. Although IIRC it does not work if the merge changes the same files as your dirty work tree touches, but I could very well be wrong there. Hth, Dscho ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:01 ` Johannes Schindelin @ 2007-06-13 15:40 ` Andy Parkins 2007-06-13 15:54 ` Johannes Schindelin 2007-06-13 15:56 ` Bill Lear 2007-06-13 17:13 ` Junio C Hamano 1 sibling, 2 replies; 43+ messages in thread From: Andy Parkins @ 2007-06-13 15:40 UTC (permalink / raw) To: git; +Cc: Johannes Schindelin, Bill Lear On Wednesday 2007 June 13, Johannes Schindelin wrote: > The other thing, if you have to, is to put all dirty changes into the > index before pull. Something like "git add $(git ls-files --modified)". Or the shiny new git add -u which works a treat :-) Andy -- Dr Andy Parkins, M Eng (hons), MIET andyparkins@gmail.com ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:40 ` Andy Parkins @ 2007-06-13 15:54 ` Johannes Schindelin 2007-06-13 15:56 ` Bill Lear 1 sibling, 0 replies; 43+ messages in thread From: Johannes Schindelin @ 2007-06-13 15:54 UTC (permalink / raw) To: Andy Parkins; +Cc: git, Bill Lear Hi, On Wed, 13 Jun 2007, Andy Parkins wrote: > On Wednesday 2007 June 13, Johannes Schindelin wrote: > > > The other thing, if you have to, is to put all dirty changes into the > > index before pull. Something like "git add $(git ls-files --modified)". > > Or the shiny new > > git add -u > > which works a treat :-) Yeah, completely forgot about that. Another idea just hit me: you could add this to your "[alias]" section: stash = !git add -u && \ tree=$(git-write-tree) && \ commit=$(echo stash $(date) | \ git-commit-tree $tree -p HEAD) && \ git-update-ref refs/heads/stash $commit && \ git-reset --hard up = !git stash && git pull && git cherry-pick -n stash Or something like that (untested!). Then, your users could use "git up" to pull from origin, and reapply their changes on top, without committing. This assumes that your users only have the remote "origin", but given their obvious "objections" to Git concepts, I think they do. Ciao, Dscho ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:40 ` Andy Parkins 2007-06-13 15:54 ` Johannes Schindelin @ 2007-06-13 15:56 ` Bill Lear 2007-06-13 16:07 ` Johannes Schindelin 1 sibling, 1 reply; 43+ messages in thread From: Bill Lear @ 2007-06-13 15:56 UTC (permalink / raw) To: Andy Parkins; +Cc: git, Johannes Schindelin On Wednesday, June 13, 2007 at 16:40:18 (+0100) Andy Parkins writes: >On Wednesday 2007 June 13, Johannes Schindelin wrote: > >> The other thing, if you have to, is to put all dirty changes into the >> index before pull. Something like "git add $(git ls-files --modified)". > >Or the shiny new > > git add -u > >which works a treat :-) Better. I wonder, also, if there could be a way to alert users that their working tree is dirty before all the git pull blather comes out, scaring their poor little souls? So, instead of this: % git pull remote: Generating pack... remote: Done counting 122 objects. remote: Result has 90 objects. remote: Deltifying 90 objects. remote: 100% (90/90) done Unpacking 90 objects remote: Total 90 (delta 59), reused 41 (delta 10) 100% (90/90) done * refs/remotes/origin/master: fast forward to branch 'master' of git://source/sc old..new: 171b65f..0be3472 * refs/remotes/origin/v1.0: fast forward to branch 'v1.0' of git://source/sc old..new: a9de9dd..efa3a73 Updating 717d9f6..0be3472 src/fs/testsuite/fs.tst/gettest: needs update src/nl/EocCompiler.cc: needs update src/nl/EocCompiler.hh: needs update src/nl/Nl.cc: needs update fatal: Entry 'src/netlist/EocCompiler.cc' not uptodate. Cannot merge. we could have: % git pull Sorry, I can't pull, as you have a dirty working tree. Please commit your changes or move your files before you pull. These are the files that are preventing this: src/fs/testsuite/fs.tst/gettest src/nl/EocCompiler.cc src/nl/EocCompiler.hh src/nl/Nl.cc Bill ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:56 ` Bill Lear @ 2007-06-13 16:07 ` Johannes Schindelin 2007-06-13 16:30 ` Bill Lear 0 siblings, 1 reply; 43+ messages in thread From: Johannes Schindelin @ 2007-06-13 16:07 UTC (permalink / raw) To: Bill Lear; +Cc: Andy Parkins, git Hi, On Wed, 13 Jun 2007, Bill Lear wrote: > I wonder, also, if there could be a way to alert users that their > working tree is dirty before all the git pull blather comes out, scaring > their poor little souls? Well, it's their fault, isn't it? > So, instead of this: > > % git pull > remote: Generating pack... > remote: Done counting 122 objects. > remote: Result has 90 objects. > remote: Deltifying 90 objects. > remote: 100% (90/90) done > Unpacking 90 objects > remote: Total 90 (delta 59), reused 41 (delta 10) > 100% (90/90) done > * refs/remotes/origin/master: fast forward to branch 'master' of > git://source/sc > old..new: 171b65f..0be3472 > * refs/remotes/origin/v1.0: fast forward to branch 'v1.0' of > git://source/sc > old..new: a9de9dd..efa3a73 > Updating 717d9f6..0be3472 > src/fs/testsuite/fs.tst/gettest: needs update > src/nl/EocCompiler.cc: needs update > src/nl/EocCompiler.hh: needs update > src/nl/Nl.cc: needs update > fatal: Entry 'src/netlist/EocCompiler.cc' not uptodate. Cannot merge. Sorry, this is the first time Git can realize that the dirty working directory conflicts with the changes about to be applied. For example, I run "git pull" very often with a modified Makefile. If the merge would not touch the Makefile, it would succeed. No need to do anything fancy. If you do have to shut the (otherwise useful) messages up, you can always have an alias (using the advanced technique illustrated in another post in this thread). > % git pull > Sorry, I can't pull, as you have a dirty working tree. Please commit > your changes or move your files before you pull. These are the > files that are preventing this: > > src/fs/testsuite/fs.tst/gettest > src/nl/EocCompiler.cc > src/nl/EocCompiler.hh > src/nl/Nl.cc As far as I can see, gettest is not responsible, so this would be wrong. Ciao, Dscho ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 16:07 ` Johannes Schindelin @ 2007-06-13 16:30 ` Bill Lear 0 siblings, 0 replies; 43+ messages in thread From: Bill Lear @ 2007-06-13 16:30 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Andy Parkins, git On Wednesday, June 13, 2007 at 17:07:20 (+0100) Johannes Schindelin writes: >Hi, > >On Wed, 13 Jun 2007, Bill Lear wrote: > >> I wonder, also, if there could be a way to alert users that their >> working tree is dirty before all the git pull blather comes out, scaring >> their poor little souls? > >Well, it's their fault, isn't it? Yes, it is. But that's no reason not to try to produce a nicer warning. >> fatal: Entry 'src/netlist/EocCompiler.cc' not uptodate. Cannot merge. > >Sorry, this is the first time Git can realize that the dirty working >directory conflicts with the changes about to be applied. Ah, this makes sense. It has to do all the other stuff first and only when it comes across one that won't "fit" does it complain. This makes more sense now... Bill ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:01 ` Johannes Schindelin 2007-06-13 15:40 ` Andy Parkins @ 2007-06-13 17:13 ` Junio C Hamano 1 sibling, 0 replies; 43+ messages in thread From: Junio C Hamano @ 2007-06-13 17:13 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Bill Lear, git Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: > The other thing, if you have to, is to put all dirty changes into the > index before pull. Something like "git add $(git ls-files --modified)". > You can even make that a global alias for your users. Although IIRC it > does not work if the merge changes the same files as your dirty work tree > touches, but I could very well be wrong there. I do not think that would change the issue in general, as the index needs to be clean (wrt HEAD) during a conflicting merge. Incidentally, I was planning to start a "stash dirty state and later reapply on a different commit" soon (if I survive an event planned tomorrow, that is ;-). When you are in the middle of something (and when you are not in the middle of a merge), you have two states you care about. What is in the index, and what is in the working tree. Conceptually, even though you do _not_ have commits for these two extra states, your "history" would look like this: o <- working tree state = W / o <- index state = I / -------o <- HEAD A dirty merge (whether it is done as "git checkout $another", "git merge $commit", or "git pull $somebodyelse") is to first stash away I and W, perform the merge proper to advance HEAD, and after all that is done, recreate the index and working tree state on top of the updated HEAD, to arrive at this: o --> * <- new working tree state = W' / / o --> * <- new index state = I' / / -------o-------* <- merge = new HEAD old HEAD ^ / / --------o---o <- other history This can be internally done as four steps: * stash the dirty states (save I and W) - record I by "git commit" (no parameters to commit the index). - record W by "git add . && git commit -a". - remember HEAD as $STASH. * match the working tree and the index to original HEAD by "reset HEAD^ && reset --hard HEAD". The first --mixed reset is to forget about new files added with "git add .", so that the second reset will not remove them from the working tree. * perform a merge in the resulting clean tree * unstash the dirty states - I' is the three-way merge between $STASH~1 and the new HEAD using $STASH~2 as the common ancestor. - W' is the three-way merge between $STASH and I' using $STASH~1 as the common ancestor. Unstashing operation can potentially require two merge conflict resolutions. As we _care_ about distinction between the index state and the working tree state, this is unavoidable. Side note: as an implementation, it is a possibility not to record I and record only W as the direct child of the HEAD when stashing. Unstashing would update only the working tree (i.e. after unstashing, the index and the HEAD exactly matches). But it risks "forgetting" newly added files and I would say it is unacceptable for that reason, even if we declare that this feature is only for non-git people. Combined with the potential conflict resolution for the merge proper, you have to resolve up to three merges in a row. One conflict resolution is something even CVS users must accept anyway, so we are talking about up to two _extra_ conflict resolutions here. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:14 pull into dirty working tree Bill Lear ` (2 preceding siblings ...) 2007-06-13 15:01 ` Johannes Schindelin @ 2007-06-14 4:22 ` Daniel Barkalow 2007-06-14 5:21 ` Linus Torvalds 4 siblings, 0 replies; 43+ messages in thread From: Daniel Barkalow @ 2007-06-14 4:22 UTC (permalink / raw) To: Bill Lear; +Cc: git On Wed, 13 Jun 2007, Bill Lear wrote: > We have some CVS users who complain that they cannot do a pull > into a dirty working tree, as they could under CVS. Here is > their scenario: they make a few changes to their code and want > to test it out; someone else pushes changes to the central repo > that they then want to add to their working tree to test also; > they then want to pull in these changes and test everything, as > if they had done 'mv stuff stuff-; git pull; mv stuff- stuff'. > > They would like an option (perhaps a config option) to do a "dirty > pull". > > The git-merge documentation states: > > You may have local modifications in the working tree files. In other > words, git-diff is allowed to report changes. However, the merge uses > your working tree as the working area, and in order to prevent the > merge operation from losing such changes, it makes sure that they do > not interfere with the merge. Those complex tables in read-tree > documentation define what it means for a path to "interfere with the > merge". And if your local modifications interfere with the merge, > again, it stops before touching anything. > > But my colleagues are still wondering: why can't git just do it as > CVS does? > > I know there are workarounds: I myself documented a set of commands > to "put things on a shelf", but they still are whining. > > I need a convincing argument: not a technical one, but one that is > practical (e.g. where CVS would do harm that git is preventing). Where CVS would do harm that git is preventing is if they did something brilliant, forgot how they did it, got other people's changes from the central repository, and got complicated merge conflicts, and lost their change trying to resolve them. (Or, for that matter, if the merge algorithm screwed up the file without reporting conflicts.) What git refuses to do is overwrite a file you've changed when you haven't committed it, because something could go wrong, and you'd lose the work. It would be possible to tell git that you're okay with it accidentally losing your work, but people tend not to like this idea quite so much when it's phrased like that. The git sequence for this situation is: $ git commit -a $ git fetch $ git rebase origin The operation they want to perform is "rebase", which puts the changes they made on top of other people's changes instead of where they were written. It also wants the changes committed, so that it doesn't have to worry about losing your work, but afterward you can use "git commit --amend" to add fixes and the rest of your changes, because your work is the top commit and hasn't been pushed out. Alternatively, "git reset HEAD^" at the end of the sequence will turn the commit into uncommitted changes. -Daniel *This .sig left intentionally blank* ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 14:14 pull into dirty working tree Bill Lear ` (3 preceding siblings ...) 2007-06-14 4:22 ` Daniel Barkalow @ 2007-06-14 5:21 ` Linus Torvalds 2007-06-14 7:49 ` Junio C Hamano 2007-06-14 12:46 ` Bill Lear 4 siblings, 2 replies; 43+ messages in thread From: Linus Torvalds @ 2007-06-14 5:21 UTC (permalink / raw) To: Bill Lear; +Cc: git On Wed, 13 Jun 2007, Bill Lear wrote: > > We have some CVS users who complain that they cannot do a pull > into a dirty working tree, as they could under CVS. Well, a lot of people have told you that the answer is "don't do that", but I actually somewhat disagree. I think it might be perfectly fine to allow for a *fast-forward* pull to do a three-way merge on the working tree, assuming the index is clean in the paths that got modified. For a real merge (not just a fast-forward), we really *really* must not do it, for a very simple reason: we have no sane way to handle conflicts if we have both a merge from the pull itself _and_ a merge from the working tree. Don't get me wrong: I'm sure it's possible in theory, I just think that in practice it's such a total hairball that it's not worth it! So I think we could actually try to allow "git pull" with a fast-forward pull and a dirty working tree. (We obviously _already_ allow a working tree that is dirty in the paths that don't actually get changed at all! I use that all the time. So this is strictly limited to the "dirty state actually overlaps with what got pulled!) It might make it a bit easier for CVS people to get used to the git model: keep your dirty working tree, and do "git pull" to update it, and fix up any conflicts in the working tree. That's how CVS works - it's a bad model, but it's a model that may be worth supporting just to get people more easily into the _good_ model. Linus ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 5:21 ` Linus Torvalds @ 2007-06-14 7:49 ` Junio C Hamano 2007-06-14 8:01 ` Raimund Bauer 2007-06-14 8:06 ` Steven Grimm 2007-06-14 12:46 ` Bill Lear 1 sibling, 2 replies; 43+ messages in thread From: Junio C Hamano @ 2007-06-14 7:49 UTC (permalink / raw) To: Linus Torvalds; +Cc: Bill Lear, git Linus Torvalds <torvalds@linux-foundation.org> writes: > It might make it a bit easier for CVS people to get used to the git model: > keep your dirty working tree, and do "git pull" to update it, and fix up > any conflicts in the working tree. That's how CVS works - it's a bad > model, but it's a model that may be worth supporting just to get people > more easily into the _good_ model. If a bad model _is_ supported, what incentive is there for these people to move into the good model, I honestly wonder... ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 7:49 ` Junio C Hamano @ 2007-06-14 8:01 ` Raimund Bauer 2007-06-14 8:06 ` Steven Grimm 1 sibling, 0 replies; 43+ messages in thread From: Raimund Bauer @ 2007-06-14 8:01 UTC (permalink / raw) To: Junio C Hamano; +Cc: Linus Torvalds, Bill Lear, git On Thu, 2007-06-14 at 00:49 -0700, Junio C Hamano wrote: > Linus Torvalds <torvalds@linux-foundation.org> writes: > > > It might make it a bit easier for CVS people to get used to the git model: > > keep your dirty working tree, and do "git pull" to update it, and fix up > > any conflicts in the working tree. That's how CVS works - it's a bad > > model, but it's a model that may be worth supporting just to get people > > more easily into the _good_ model. > > If a bad model _is_ supported, what incentive is there for these > people to move into the good model, I honestly wonder... Is it a bad model for the normal development process? Probably. Would it solve the problem of "I want to keep my debug-statements that I won't ever commit in the merged result"? ... yes I think that's at least one valid usecase we should probably support. One I'd also like to use ;-) -- best regards Ray ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 7:49 ` Junio C Hamano 2007-06-14 8:01 ` Raimund Bauer @ 2007-06-14 8:06 ` Steven Grimm 2007-06-14 14:25 ` Nicolas Pitre 1 sibling, 1 reply; 43+ messages in thread From: Steven Grimm @ 2007-06-14 8:06 UTC (permalink / raw) To: Junio C Hamano; +Cc: Linus Torvalds, Bill Lear, git Junio C Hamano wrote: > If a bad model _is_ supported, what incentive is there for these > people to move into the good model, I honestly wonder.. Presumably it's a good model because it's easier, more productive, more predictable, more reliable, or some combination of those things; that's the incentive. If it's none of those things for a given developer, then maybe it's not in fact a better model for them. Of course, even if it is better for them, some people will never move -- but those are the people who won't willingly move to git anyway unless the bad model is supported. There are enough of them out there that people who *do* want to use the good model, but have to work in an environment where they're outnumbered by those other folks, find they can't sell the organization on git because it forces a change in work style on people who aren't interested in changing their work styles. (Not a purely hypothetical statement, sadly.) You can view this in terms of being a leg up for people who *do* want to use git, but are in environments where they are unable to convince or force everyone else to adopt git-style workflows. I think it's telling that almost all the discussions about this kind of feature are of the form, "I'm trying to convince my team to use git, and they find it no good because of X." It's the person trying to sell git to the group, presumably so they can use it themselves without having to go through a CVS or Subversion or p4 gateway, that this stuff really helps. That the rest of the team will benefit down the road too is nice but probably not the immediate selfish personal goal of the people who are asking for this kind of feature. -Steve ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 8:06 ` Steven Grimm @ 2007-06-14 14:25 ` Nicolas Pitre 0 siblings, 0 replies; 43+ messages in thread From: Nicolas Pitre @ 2007-06-14 14:25 UTC (permalink / raw) To: Steven Grimm; +Cc: Junio C Hamano, Linus Torvalds, Bill Lear, git On Thu, 14 Jun 2007, Steven Grimm wrote: > You can view this in terms of being a leg up for people who *do* want to use > git, but are in environments where they are unable to convince or force > everyone else to adopt git-style workflows. I think it's telling that almost > all the discussions about this kind of feature are of the form, "I'm trying to > convince my team to use git, and they find it no good because of X." It's the > person trying to sell git to the group, presumably so they can use it > themselves without having to go through a CVS or Subversion or p4 gateway, > that this stuff really helps. That the rest of the team will benefit down the > road too is nice but probably not the immediate selfish personal goal of the > people who are asking for this kind of feature. Personally, I think there is a point where it isn't worth trying to convert the world. If people consider GIT bad and unwilling to use it because of X or Z then they probably better stay with CVS. There is a limit to how backward bending should GIT do to accomodate everyone, especially if it is about compromize in its usage model just to make life easier for people who want to preserve their inferior work flow. This being said, I don't claim to have a particular opinion about the issue discussed in this thread. Simply that things should be decided on a technical basis and be justified with good arguments. Saying that "I can't convince my co-workers to use GIT if it doesn't do X" is _not_ a good argument. Nicolas ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 5:21 ` Linus Torvalds 2007-06-14 7:49 ` Junio C Hamano @ 2007-06-14 12:46 ` Bill Lear 2007-06-14 15:46 ` Linus Torvalds 1 sibling, 1 reply; 43+ messages in thread From: Bill Lear @ 2007-06-14 12:46 UTC (permalink / raw) To: Linus Torvalds; +Cc: git On Wednesday, June 13, 2007 at 22:21:38 (-0700) Linus Torvalds writes: >On Wed, 13 Jun 2007, Bill Lear wrote: >> >> We have some CVS users who complain that they cannot do a pull >> into a dirty working tree, as they could under CVS. > >Well, a lot of people have told you that the answer is "don't do that", >but I actually somewhat disagree. I have now officially fallen out of my chair. >I think it might be perfectly fine to allow for a *fast-forward* pull to >do a three-way merge on the working tree, assuming the index is clean in >the paths that got modified. >... >It might make it a bit easier for CVS people to get used to the git model: >keep your dirty working tree, and do "git pull" to update it, and fix up >any conflicts in the working tree. That's how CVS works - it's a bad >model, but it's a model that may be worth supporting just to get people >more easily into the _good_ model. Exactly my desires. I think it could work reliably, and as they mature into git users, they will come to appreciate branches. Bill ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 12:46 ` Bill Lear @ 2007-06-14 15:46 ` Linus Torvalds 2007-06-14 20:20 ` Olivier Galibert 2007-06-15 0:46 ` Martin Langhoff 0 siblings, 2 replies; 43+ messages in thread From: Linus Torvalds @ 2007-06-14 15:46 UTC (permalink / raw) To: Bill Lear; +Cc: git On Thu, 14 Jun 2007, Bill Lear wrote: > On Wednesday, June 13, 2007 at 22:21:38 (-0700) Linus Torvalds writes: > >On Wed, 13 Jun 2007, Bill Lear wrote: > >> > >> We have some CVS users who complain that they cannot do a pull > >> into a dirty working tree, as they could under CVS. > > > >Well, a lot of people have told you that the answer is "don't do that", > >but I actually somewhat disagree. > > I have now officially fallen out of my chair. Well, the thing is, I actually pull into dirty trees all the time. So I can really see the point of wanting to have some dirty state (you're not ready to commit it yet), but still wanting to update your tree to some newer state.. Of course, in the kernel (where I do this - I do it to a much lesser degree in git too, but for the kernel it's "normal" for me to do it), we have very good modularization of source code, so I can do the "pull into a dirty tree" with _current_ git, just because there is almost never a clash (and if there is, nothing bad happens: the pull won't succeed, and I can decide to either stash away my diff or just undo it, and then re-pull afterwards). But I can also well imagine that other projects aren't quite as modular as the kernel is. In fact, I pretty much know that for a fact.. We've spent years splitting things up, just because clashes are nasty. So I don't think the "pull into a dirty tree" is necessarily a horribly bad workflow. It *can* be due to bad habits, but it can equally well be due to perfectly fine habits like having added some debugging code that you actually want to eventually throw away, but you haven't quite debugged it totally yet. For example, maybe the reason you pull is because there's a potential fix in upstream - you want to keep your debugging code (to _verify_ the fix, or verify that it wasn't a fix at all). The fact that some CVS users do it because they are used to it doesn't _automatically_ make it bad form. They probably have really bad reasons for doing it (namely the fact that under CVS, you cannot commit to your tree as aggressively as you can under git, since committing affects everybody else too), and *those* reasons may not be true under git, but the other ones (see above) are still what appear to be valid reasons for allowing this.. So the only reason I'm ambivalent is actually that I suspect it's just hard to do cleanly. For example, doing it for the fast-forward case is much easier, but then people will start *wanting* to do it for the more complex "real merge" case, and will complain when that doesn't work. And that one really _is_ fundamentally harder. So it might be easier to take a "git stash ; git pull ; git unstash" approach instead of making "git pull" handle working tree conflicts itseld. Linus ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 15:46 ` Linus Torvalds @ 2007-06-14 20:20 ` Olivier Galibert 2007-06-14 20:30 ` Linus Torvalds 2007-06-15 0:46 ` Martin Langhoff 1 sibling, 1 reply; 43+ messages in thread From: Olivier Galibert @ 2007-06-14 20:20 UTC (permalink / raw) To: Linus Torvalds; +Cc: Bill Lear, git On Thu, Jun 14, 2007 at 08:46:27AM -0700, Linus Torvalds wrote: > So it might be easier to take a "git stash ; git pull ; git unstash" > approach instead of making "git pull" handle working tree conflicts > itseld. Isn't that "git add .; git commit; git fetch; git rebase <something>; git reset ^HEAD"? With the conflict resolution happening at rebase time. OG. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 20:20 ` Olivier Galibert @ 2007-06-14 20:30 ` Linus Torvalds 0 siblings, 0 replies; 43+ messages in thread From: Linus Torvalds @ 2007-06-14 20:30 UTC (permalink / raw) To: Olivier Galibert; +Cc: Bill Lear, git On Thu, 14 Jun 2007, Olivier Galibert wrote: > On Thu, Jun 14, 2007 at 08:46:27AM -0700, Linus Torvalds wrote: > > So it might be easier to take a "git stash ; git pull ; git unstash" > > approach instead of making "git pull" handle working tree conflicts > > itseld. > > Isn't that "git add .; git commit; git fetch; git rebase <something>; > git reset ^HEAD"? With the conflict resolution happening at rebase > time. No. The two workflows happen to co-incide *if* the "git pull" is a fast-forward, but not if you actually had previous commits that you wanted the "git pull" to merge. So if you want things to actually work as a "git pull with dirty state merge", you really do need to do "git stash + git pull + git unstash". Linus ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-14 15:46 ` Linus Torvalds 2007-06-14 20:20 ` Olivier Galibert @ 2007-06-15 0:46 ` Martin Langhoff 2007-06-15 1:07 ` Linus Torvalds 1 sibling, 1 reply; 43+ messages in thread From: Martin Langhoff @ 2007-06-15 0:46 UTC (permalink / raw) To: Linus Torvalds; +Cc: Bill Lear, git On 6/15/07, Linus Torvalds <torvalds@linux-foundation.org> wrote: > Well, the thing is, I actually pull into dirty trees all the time. So I > can really see the point of wanting to have some dirty state (you're not > ready to commit it yet), but still wanting to update your tree to some > newer state.. Right now git merges/fforwards well with dirty state as long as the same path is not touched on both sides. But there are several situations where it could do better allowing those ops to go through if they don't result in any conflict. - For Fast Forwards on a dirty path - attempt the merge on a temp file and refuse to complete the FF there is a conflict. - For merges on a dirty path, attempt the merge. If both the tree merge _and_ the subsequent with the dirty state are clean, then there is no problem updating the checkout. In both cases, we can still go ahead in the case of a conflict against the local state and give the user the normal conflict markers (or separate files of the patch doesn't apply at all. The situation where I think it is valid to refuse to go ahead is in the "merge on dirty path" where the tree merge results in a conflict. Too many states to keep track of -- not for git but for the user. cheers, martin ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-15 0:46 ` Martin Langhoff @ 2007-06-15 1:07 ` Linus Torvalds 2007-06-15 3:33 ` Martin Langhoff 0 siblings, 1 reply; 43+ messages in thread From: Linus Torvalds @ 2007-06-15 1:07 UTC (permalink / raw) To: Martin Langhoff; +Cc: Bill Lear, git On Fri, 15 Jun 2007, Martin Langhoff wrote: > > Right now git merges/fforwards well with dirty state as long as the > same path is not touched on both sides. But there are several > situations where it could do better allowing those ops to go through > if they don't result in any conflict. > > - For Fast Forwards on a dirty path - attempt the merge on a temp file > and refuse to complete the FF there is a conflict. > - For merges on a dirty path, attempt the merge. If both the tree > merge _and_ the subsequent with the dirty state are clean, then there > is no problem updating the checkout. > > In both cases, we can still go ahead in the case of a conflict against > the local state and give the user the normal conflict markers (or > separate files of the patch doesn't apply at all. The situation where > I think it is valid to refuse to go ahead is in the "merge on dirty > path" where the tree merge results in a conflict. Too many states to > keep track of -- not for git but for the user. I agree, but there is actually a practical implementation problem with doing that: - currently, we can decide *ahead* of time (by just looking at the index, whether the index entry is clean, and the two branches) whether the merge can go ahead or not. - so we actually do two passes: the first pass checks that we can do what we want to do cleanly, and the second pass actually starts changing the working tree! Now, if you actually start doing the *merge* thing, the biggest practical problem ends up being that the natural place where you find out that "oops, we can't get a clean result" is in phase 2 - *after* you have potentially already done earlier merges in the working directory! And that's unacceptable. A "git pull" needs to either fail early without making any modifications at all (telling people that the tree is dirty and cannot be merged), or it needs to complete but leave conflict markers. But yeah, if you can check in stage 1 (_without_ changing the working tree) whether the merge will work, then everything is fine. Linus ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-15 1:07 ` Linus Torvalds @ 2007-06-15 3:33 ` Martin Langhoff 2007-06-15 18:26 ` Robin Rosenberg 0 siblings, 1 reply; 43+ messages in thread From: Martin Langhoff @ 2007-06-15 3:33 UTC (permalink / raw) To: Linus Torvalds; +Cc: Bill Lear, git On 6/15/07, Linus Torvalds <torvalds@linux-foundation.org> wrote: > But yeah, if you can check in stage 1 (_without_ changing the working > tree) whether the merge will work, then everything is fine. Aha- so at phase 1 we know - what paths are dirty in the checkout - what paths of the merge need an actuall diff3 merge perhaps we can do those diff3 merges elsewhere (tempfiles). If they are trivial diff3 merges, then we can complete the merge operation without touching the checkout. After this is complete, we can then update the checkout... cheers, m ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-15 3:33 ` Martin Langhoff @ 2007-06-15 18:26 ` Robin Rosenberg 0 siblings, 0 replies; 43+ messages in thread From: Robin Rosenberg @ 2007-06-15 18:26 UTC (permalink / raw) To: Martin Langhoff; +Cc: Linus Torvalds, Bill Lear, git fredag 15 juni 2007 skrev Martin Langhoff: > On 6/15/07, Linus Torvalds <torvalds@linux-foundation.org> wrote: > > But yeah, if you can check in stage 1 (_without_ changing the working > > tree) whether the merge will work, then everything is fine. > > Aha- so at phase 1 we know > - what paths are dirty in the checkout > - what paths of the merge need an actuall diff3 merge > > perhaps we can do those diff3 merges elsewhere (tempfiles). If they > are trivial diff3 merges, then we can complete the merge operation > without touching the checkout. After this is complete, we can then > update the checkout... Can't you treat this like git-am or git-rabase. Save the diff to .dottest. Then peform the pull just like you do normally involving the user if necessary. After that either automatically or after a --continue/--abort you apply the diff with it's own conflicts. -- robin ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree @ 2007-06-13 15:03 MichaelTiloDressel 2007-06-13 15:36 ` Bill Lear 0 siblings, 1 reply; 43+ messages in thread From: MichaelTiloDressel @ 2007-06-13 15:03 UTC (permalink / raw) To: git Hi, why don't they just do a simple git commit -a of their work before pulling? That's different to cvs! Committing only affects the cloned repository. I think one of the biggest advantages of git is the concept of everyone working on a clone. So developers are not prevented from actually using revision control just because they are afraid of disturbing others. They don't until they e.g. push! Cheers, Michael ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:03 MichaelTiloDressel @ 2007-06-13 15:36 ` Bill Lear 2007-06-13 17:31 ` Michael Dressel 0 siblings, 1 reply; 43+ messages in thread From: Bill Lear @ 2007-06-13 15:36 UTC (permalink / raw) To: MichaelTiloDressel@t-online.de; +Cc: git On Wednesday, June 13, 2007 at 17:03:58 (+0200) MichaelTiloDressel@t-online.de writes: >Hi, > >why don't they just do a simple >git commit -a >of their work before pulling? Because they are basically playing with some code and don't want to commit it. >That's different to cvs! Committing only affects the cloned repository. Yup, we realize that. >I think one of the biggest advantages of git is the concept of everyone >working on a clone. So developers are not prevented from actually using >revision control just because they are afraid of disturbing others. They >don't until they e.g. push! Right, but they just want updates to their working tree, as they could do under CVS, without issuing five (or even one) other commands. Bill ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 15:36 ` Bill Lear @ 2007-06-13 17:31 ` Michael Dressel 2007-06-13 18:12 ` Bill Lear 0 siblings, 1 reply; 43+ messages in thread From: Michael Dressel @ 2007-06-13 17:31 UTC (permalink / raw) To: Bill Lear; +Cc: git Hi, but even if they just play with the code. Why not always commit? As long as they don't push nobody else will be affected. Even if you play with the code it's useful to go back to earlier versions. Why would you not want to benefit from this possibility? So this would really only be two commands the commit and the pull command. I hope I didn't miss your point completely. Cheers Michael On Wed, 13 Jun 2007, Bill Lear wrote: > On Wednesday, June 13, 2007 at 17:03:58 (+0200) MichaelTiloDressel@t-online.de writes: > >Hi, > > > >why don't they just do a simple > >git commit -a > >of their work before pulling? > > Because they are basically playing with some code and don't want to > commit it. > > >That's different to cvs! Committing only affects the cloned repository. > > Yup, we realize that. > > >I think one of the biggest advantages of git is the concept of everyone > >working on a clone. So developers are not prevented from actually using > >revision control just because they are afraid of disturbing others. They > >don't until they e.g. push! > > Right, but they just want updates to their working tree, as they could > do under CVS, without issuing five (or even one) other commands. > > > Bill > ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 17:31 ` Michael Dressel @ 2007-06-13 18:12 ` Bill Lear 2007-06-13 18:30 ` Johannes Schindelin 0 siblings, 1 reply; 43+ messages in thread From: Bill Lear @ 2007-06-13 18:12 UTC (permalink / raw) To: Michael Dressel; +Cc: git On Wednesday, June 13, 2007 at 19:31:50 (+0200) Michael Dressel writes: >Hi, > >but even if they just play with the code. Why not always commit? >As long as they don't push nobody else will be affected. > >Even if you play with the code it's useful to go back to earlier >versions. Why would you not want to benefit from this possibility? > >So this would really only be two commands the commit and the pull command. > >I hope I didn't miss your point completely. Not completely: they don't want to commit, as this will then "pollute" the history in their working repository (which is just temporarily being used to play with a new feature, idea, bug fix, optimization, etc.). This pollution with a handful of garbage would then have to be undone were they to say "ok, that's really not a good idea". If a pull into a dirty tree were possible, that last step could be just a simple reset, or continuing to explore with the code, etc. Their benchmark is CVS: CVS lets them do this easily (and yes, I understand that CVS sucks compared to git, so don't even start), and so even if they have to have 2 commands to do what they did in CVS with 1, they complain. My job is to either justify what git does to them to shut them up, or to speak to the git community to see if their desires are remotely rational. It seems to me, based on several posts here, particularly Junio's, that they are being remotely rational and it might be a reasonable addition to git to be able to say "git pull --dirty" or whatever... Bill ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 18:12 ` Bill Lear @ 2007-06-13 18:30 ` Johannes Schindelin 2007-06-13 18:56 ` Bill Lear 0 siblings, 1 reply; 43+ messages in thread From: Johannes Schindelin @ 2007-06-13 18:30 UTC (permalink / raw) To: Bill Lear; +Cc: Michael Dressel, git Hi, On Wed, 13 Jun 2007, Bill Lear wrote: > Not completely: they don't want to commit, as this will then "pollute" > the history in their working repository (which is just temporarily > being used to play with a new feature, idea, bug fix, optimization, > etc.). This pollution with a handful of garbage would then have to be > undone were they to say "ok, that's really not a good idea". If a > pull into a dirty tree were possible, that last step could be just a > simple reset, or continuing to explore with the code, etc. Notice that I am _not_ saying that CVS is bad. I am saying that their workflow is likely bad (and yes, they should change that workflow, since they now _can_). Two things do they risk happily, which they should not do: - they test their new feature against different references. For example, it might well be that they tested cases A, B, and C before pull, and D, E and F after that. It is really easy to get lost in what you have, and what not. Now, guess what. Merges are known to break things sometimes. Even the best merge algorithm. Now your developers say "we tested it, and the merge broke it, it's not our fault". But it is. - That new feature will have to be committed at some stage. Either your devs commit at the end, which makes it a monster commit, which is bad. Or they are _already_ using the suggested workflow "commit && pull", which makes your whole complaint moot. Ciao, Dscho ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 18:30 ` Johannes Schindelin @ 2007-06-13 18:56 ` Bill Lear 2007-06-13 20:17 ` Robin Rosenberg 0 siblings, 1 reply; 43+ messages in thread From: Bill Lear @ 2007-06-13 18:56 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Michael Dressel, git On Wednesday, June 13, 2007 at 19:30:23 (+0100) Johannes Schindelin writes: >Hi, > >On Wed, 13 Jun 2007, Bill Lear wrote: > >> Not completely: they don't want to commit, as this will then "pollute" >> the history in their working repository (which is just temporarily >> being used to play with a new feature, idea, bug fix, optimization, >> etc.). This pollution with a handful of garbage would then have to be >> undone were they to say "ok, that's really not a good idea". If a >> pull into a dirty tree were possible, that last step could be just a >> simple reset, or continuing to explore with the code, etc. > >Notice that I am _not_ saying that CVS is bad. I am saying that their >workflow is likely bad (and yes, they should change that workflow, since >they now _can_). Yes, I have urged this. But, they are stubborn, smart people, and if they see tool X allow something, they wonder why tool Y does not support it. >Two things do they risk happily, which they should not do: > >- they test their new feature against different references. For example, > it might well be that they tested cases A, B, and C before pull, and D, > E and F after that. It is really easy to get lost in what you have, and > what not. Now, guess what. Merges are known to break things sometimes. > Even the best merge algorithm. Now your developers say "we tested it, > and the merge broke it, it's not our fault". But it is. Well, their testing is something along the line of "I'm going to hack something here, and then I want to see if Joe's latest changes work with it". Then, they want to pull in Joe's changes, run a test, and if their changes don't work, fix them, discard them, etc. >- That new feature will have to be committed at some stage. Either your > devs commit at the end, which makes it a monster commit, which is bad. > Or they are _already_ using the suggested workflow "commit && pull", > which makes your whole complaint moot. Perhaps: again, they may just be taking stabs that they know are wild, and will likely not be committed. I'm not trying to argue for their point: I do most of my new work on branches, very rarely on the master branch, and can handle the git pull not working in a dirty tree with merge issues. Some of the people we work with are not developers per se: they are engineers who sometimes like to fiddle (say, with a compiler optimization setting) and who never push into our company repo. They only see CVS and compare git to it. When git prevents you from doing something they see as perfectly reasonable, they get annoyed and say "git sucks". I'm battling in the git corner against this, but there is only so much I can do. Bill ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 18:56 ` Bill Lear @ 2007-06-13 20:17 ` Robin Rosenberg 2007-06-13 23:32 ` Johannes Schindelin 0 siblings, 1 reply; 43+ messages in thread From: Robin Rosenberg @ 2007-06-13 20:17 UTC (permalink / raw) To: Bill Lear; +Cc: Johannes Schindelin, Michael Dressel, git onsdag 13 juni 2007 skrev Bill Lear: > On Wednesday, June 13, 2007 at 19:30:23 (+0100) Johannes Schindelin writes: > >Hi, > > > >On Wed, 13 Jun 2007, Bill Lear wrote: > > > >> Not completely: they don't want to commit, as this will then "pollute" > >> the history in their working repository (which is just temporarily > >> being used to play with a new feature, idea, bug fix, optimization, > >> etc.). This pollution with a handful of garbage would then have to be > >> undone were they to say "ok, that's really not a good idea". If a > >> pull into a dirty tree were possible, that last step could be just a > >> simple reset, or continuing to explore with the code, etc. > > > >Notice that I am _not_ saying that CVS is bad. I am saying that their > >workflow is likely bad (and yes, they should change that workflow, since > >they now _can_). > > Yes, I have urged this. But, they are stubborn, smart people, and if > they see tool X allow something, they wonder why tool Y does not > support it. > > >Two things do they risk happily, which they should not do: > > > >- they test their new feature against different references. For example, > > it might well be that they tested cases A, B, and C before pull, and D, > > E and F after that. It is really easy to get lost in what you have, and > > what not. Now, guess what. Merges are known to break things sometimes. > > Even the best merge algorithm. Now your developers say "we tested it, > > and the merge broke it, it's not our fault". But it is. > > Well, their testing is something along the line of "I'm going to hack > something here, and then I want to see if Joe's latest changes work > with it". Then, they want to pull in Joe's changes, run a test, and > if their changes don't work, fix them, discard them, etc. > > >- That new feature will have to be committed at some stage. Either your > > devs commit at the end, which makes it a monster commit, which is bad. > > Or they are _already_ using the suggested workflow "commit && pull", > > which makes your whole complaint moot. > > Perhaps: again, they may just be taking stabs that they know are wild, > and will likely not be committed. > > I'm not trying to argue for their point: I do most of my new work > on branches, very rarely on the master branch, and can handle > the git pull not working in a dirty tree with merge issues. > > Some of the people we work with are not developers per se: they are > engineers who sometimes like to fiddle (say, with a compiler > optimization setting) and who never push into our company repo. > They only see CVS and compare git to it. When git prevents you > from doing something they see as perfectly reasonable, they get > annoyed and say "git sucks". I'm battling in the git corner against > this, but there is only so much I can do. A typical case I recognize is a few printfs or disabling a feature that makes it harder to debug with no intentions whatsoever to commit them. What we see when the tools more or less forces people to "temporarily" commit stuff is that that stuff is often left there. "Oh, I forgot". Gah. Git has this ability when checking out, so why not on pull or merge? With stacked git I typically create a new patch, then I can push it whenever I want to have some more tracing. -- robin ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: pull into dirty working tree 2007-06-13 20:17 ` Robin Rosenberg @ 2007-06-13 23:32 ` Johannes Schindelin 0 siblings, 0 replies; 43+ messages in thread From: Johannes Schindelin @ 2007-06-13 23:32 UTC (permalink / raw) To: Robin Rosenberg; +Cc: Bill Lear, Michael Dressel, git Ho, On Wed, 13 Jun 2007, Robin Rosenberg wrote: > A typical case I recognize is a few printfs or disabling a feature that > makes it harder to debug with no intentions whatsoever to commit them. > What we see when the tools more or less forces people to "temporarily" > commit stuff is that that stuff is often left there. "Oh, I forgot". > Gah. > > Git has this ability when checking out, so why not on pull or merge? You should hold your breath for git-stash. Now that Junio declared he'd work on it. > With stacked git I typically create a new patch, then I can push it > whenever I want to have some more tracing. My evil plan is to work git-stash into sort of a lightweight StGit. I never liked that dependency to Python, and I always felt that it must be simpler than that. Ciao, Dscho ^ permalink raw reply [flat|nested] 43+ messages in thread
end of thread, other threads:[~2007-06-15 18:26 UTC | newest] Thread overview: 43+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-06-13 14:14 pull into dirty working tree Bill Lear 2007-06-13 14:38 ` Pierre Habouzit 2007-06-13 14:43 ` Pierre Habouzit 2007-06-13 14:47 ` Pierre Habouzit 2007-06-13 14:45 ` Bill Lear 2007-06-13 14:53 ` Pierre Habouzit 2007-06-13 15:01 ` Randal L. Schwartz 2007-06-13 19:28 ` Alex Riesen 2007-06-13 19:32 ` Randal L. Schwartz 2007-06-13 20:47 ` Alex Riesen 2007-06-13 20:52 ` Randal L. Schwartz 2007-06-13 21:39 ` Alex Riesen 2007-06-13 22:01 ` Randal L. Schwartz 2007-06-13 22:27 ` Alex Riesen 2007-06-13 15:01 ` Johannes Schindelin 2007-06-13 15:40 ` Andy Parkins 2007-06-13 15:54 ` Johannes Schindelin 2007-06-13 15:56 ` Bill Lear 2007-06-13 16:07 ` Johannes Schindelin 2007-06-13 16:30 ` Bill Lear 2007-06-13 17:13 ` Junio C Hamano 2007-06-14 4:22 ` Daniel Barkalow 2007-06-14 5:21 ` Linus Torvalds 2007-06-14 7:49 ` Junio C Hamano 2007-06-14 8:01 ` Raimund Bauer 2007-06-14 8:06 ` Steven Grimm 2007-06-14 14:25 ` Nicolas Pitre 2007-06-14 12:46 ` Bill Lear 2007-06-14 15:46 ` Linus Torvalds 2007-06-14 20:20 ` Olivier Galibert 2007-06-14 20:30 ` Linus Torvalds 2007-06-15 0:46 ` Martin Langhoff 2007-06-15 1:07 ` Linus Torvalds 2007-06-15 3:33 ` Martin Langhoff 2007-06-15 18:26 ` Robin Rosenberg -- strict thread matches above, loose matches on Subject: below -- 2007-06-13 15:03 MichaelTiloDressel 2007-06-13 15:36 ` Bill Lear 2007-06-13 17:31 ` Michael Dressel 2007-06-13 18:12 ` Bill Lear 2007-06-13 18:30 ` Johannes Schindelin 2007-06-13 18:56 ` Bill Lear 2007-06-13 20:17 ` Robin Rosenberg 2007-06-13 23:32 ` Johannes Schindelin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).