{"thread":{"id":"12289","subject":"on subtree checkout","startedAt":"2008-02-24T09:34:58Z","lastAt":"2008-02-26T11:23:00Z","messageCount":13,"participants":["Nguyen Thai Ngoc Duy","Robin Rosenberg","Jakub Narebski","Matthieu Moy","Johannes Schindelin","David Symonds"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"69772","messageId":"fcaeb9bf0802240134i46e276ajfe83071e0b18ce61@mail.gmail.com","threadId":"12289","inReplyTo":null,"subject":"on subtree checkout","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2008-02-24T09:34:58Z","receivedAt":"2008-02-24T09:34:58Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"I'm going to implement subtree checkout. The plan is to save \"index\nprefix\" in GIT_DIR/prefix and update git commands to use index prefix\nwhen accessing the index. If I'm heading a wrong way, stop me now.\n\nThanks\n-- \nDuy\n"},{"id":"69773","messageId":"200802241100.00107.robin.rosenberg.lists@dewire.com","threadId":"12289","inReplyTo":"fcaeb9bf0802240134i46e276ajfe83071e0b18ce61@mail.gmail.com","subject":"Re: on subtree checkout","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-02-24T09:59:59Z","receivedAt":"2008-02-24T09:59:59Z","isPatch":false,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"söndagen den 24 februari 2008 skrev Nguyen Thai Ngoc Duy:\n> I'm going to implement subtree checkout. The plan is to save \"index\n> prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n> when accessing the index. If I'm heading a wrong way, stop me now.\n\nMake it multivalue as having more than one directory checked out is quite reasonable in for example Eclipse, where there are hundreds of plugins all\nlisted at the top level, but you only need a checkout for those that you actually want to change. KDE would be another example where you want to mention multiple roots.\n\n-- robin\n"},{"id":"69774","messageId":"m31w72d63a.fsf@localhost.localdomain","threadId":"12289","inReplyTo":"fcaeb9bf0802240134i46e276ajfe83071e0b18ce61@mail.gmail.com","subject":"Re: on subtree checkout","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-02-24T10:03:27Z","receivedAt":"2008-02-24T10:03:27Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"\"Nguyen Thai Ngoc Duy\" <pclouds@gmail.com> writes:\n\n> I'm going to implement subtree checkout. The plan is to save \"index\n> prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n> when accessing the index. If I'm heading a wrong way, stop me now.\n\nIf I remember correctly previous trials to implement \"partial\ncheckout\" (\"subtree checkout\") feature, or at least discussions about\nit, used index extension.\n\nAs far as I can see the problem lies in merging...\n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"69776","messageId":"m3wsoubqmq.fsf@localhost.localdomain","threadId":"12289","inReplyTo":"200802241100.00107.robin.rosenberg.lists@dewire.com","subject":"Re: on subtree checkout","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-02-24T10:23:29Z","receivedAt":"2008-02-24T10:23:29Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Robin Rosenberg <robin.rosenberg.lists@dewire.com> writes:\n\n> söndagen den 24 februari 2008 skrev Nguyen Thai Ngoc Duy:\n> > I'm going to implement subtree checkout. The plan is to save \"index\n> > prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n> > when accessing the index. If I'm heading a wrong way, stop me now.\n> \n> Make it multivalue as having more than one directory checked out is\n> quite reasonable in for example Eclipse, where there are hundreds of\n> plugins all listed at the top level, but you only need a checkout\n> for those that you actually want to change. KDE would be another\n> example where you want to mention multiple roots.\n\nIMHO both in case of Eclipse plugins, and KDE modules/apps/whatever\nit would be much better to use submodules support than partial\ncheckouts.\n\nIMHO the best example of partial checkout workflow would be\ndocumentation writers or translators. You cannot put docs in separate\nsubmodule, as you want to have whole-tree change+documantation update\ncommits.\n\n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"69781","messageId":"200802241153.58009.robin.rosenberg.lists@dewire.com","threadId":"12289","inReplyTo":"m3wsoubqmq.fsf@localhost.localdomain","subject":"Re: on subtree checkout","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-02-24T10:53:57Z","receivedAt":"2008-02-24T10:53:57Z","isPatch":false,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"söndagen den 24 februari 2008 skrev Jakub Narebski:\n> Robin Rosenberg <robin.rosenberg.lists@dewire.com> writes:\n> \n> > söndagen den 24 februari 2008 skrev Nguyen Thai Ngoc Duy:\n> > > I'm going to implement subtree checkout. The plan is to save \"index\n> > > prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n> > > when accessing the index. If I'm heading a wrong way, stop me now.\n> > \n> > Make it multivalue as having more than one directory checked out is\n> > quite reasonable in for example Eclipse, where there are hundreds of\n> > plugins all listed at the top level, but you only need a checkout\n> > for those that you actually want to change. KDE would be another\n> > example where you want to mention multiple roots.\n> \n> IMHO both in case of Eclipse plugins, and KDE modules/apps/whatever\n> it would be much better to use submodules support than partial\n> checkouts.\n\n400 submodules... noway.\n\n-- robin\n"},{"id":"69783","messageId":"200802241253.11271.jnareb@gmail.com","threadId":"12289","inReplyTo":"200802241153.58009.robin.rosenberg.lists@dewire.com","subject":"Re: on subtree checkout","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-02-24T11:53:09Z","receivedAt":"2008-02-24T11:53:09Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Dnia niedziela 24. lutego 2008 11:53, Robin Rosenberg napisał:\n> söndagen den 24 februari 2008 skrev Jakub Narebski:\n>> Robin Rosenberg <robin.rosenberg.lists@dewire.com> writes:\n>>> söndagen den 24 februari 2008 skrev Nguyen Thai Ngoc Duy:\n\n>>>> I'm going to implement subtree checkout. The plan is to save \"index\n>>>> prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n>>>> when accessing the index. If I'm heading a wrong way, stop me now.\n>>> \n>>> Make it multivalue as having more than one directory checked out is\n>>> quite reasonable in for example Eclipse, where there are hundreds of\n>>> plugins all listed at the top level, but you only need a checkout\n>>> for those that you actually want to change. KDE would be another\n>>> example where you want to mention multiple roots.\n>> \n>> IMHO both in case of Eclipse plugins, and KDE modules/apps/whatever\n>> it would be much better to use submodules support than partial\n>> checkouts.\n> \n> 400 submodules... noway.\n\nWay.\n\nIHMO rule of thumb is: use submodules support if projects are\nindependent, or at least largely independent.\n-- \nJakub Narebski\nPoland\n"},{"id":"69796","messageId":"fcaeb9bf0802240712u5bc7173du1fe67c3bcd89d1a4@mail.gmail.com","threadId":"12289","inReplyTo":"m31w72d63a.fsf@localhost.localdomain","subject":"Re: on subtree checkout","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2008-02-24T15:12:54Z","receivedAt":"2008-02-24T15:12:54Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Sun, Feb 24, 2008 at 5:03 PM, Jakub Narebski <jnareb@gmail.com> wrote:\n>\n> \"Nguyen Thai Ngoc Duy\" <pclouds@gmail.com> writes:\n>\n>  > I'm going to implement subtree checkout. The plan is to save \"index\n>  > prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n>  > when accessing the index. If I'm heading a wrong way, stop me now.\n>\n>  If I remember correctly previous trials to implement \"partial\n>  checkout\" (\"subtree checkout\") feature, or at least discussions about\n>  it, used index extension.\n>\n>  As far as I can see the problem lies in merging...\n\nCan you elaborate? I'm really noob at merging.\n\n>  --\n>  Jakub Narebski\n>  Poland\n>  ShadeHawk on #git\n>\n\n\n\n-- \nDuy\n"},{"id":"69798","messageId":"200802241645.49718.jnareb@gmail.com","threadId":"12289","inReplyTo":"fcaeb9bf0802240712u5bc7173du1fe67c3bcd89d1a4@mail.gmail.com","subject":"Re: on subtree checkout","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-02-24T15:45:47Z","receivedAt":"2008-02-24T15:45:47Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Nguyen Thai Ngoc Duy wrote:\n> On Sun, Feb 24, 2008 at 5:03 PM, Jakub Narebski <jnareb@gmail.com> wrote:\n>>\n>> \"Nguyen Thai Ngoc Duy\" <pclouds@gmail.com> writes:\n>>\n>>> I'm going to implement subtree checkout. [...]\n>>\n>>  As far as I can see the problem lies in merging...\n> \n> Can you elaborate? I'm really noob at merging.\n\nWhat to do if when merging, or rebasing, there is conflict _outside_\nchecked out subtree?\n\n-- \nJakub Narebski\nPoland\n"},{"id":"69800","messageId":"vpqve4efiql.fsf@bauges.imag.fr","threadId":"12289","inReplyTo":"200802241645.49718.jnareb@gmail.com","subject":"Re: on subtree checkout","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@imag.fr","sentAt":"2008-02-24T15:59:30Z","receivedAt":"2008-02-24T15:59:30Z","isPatch":false,"sender":{"key":"git@matthieu-moy.fr","avatar":"https://avatars.githubusercontent.com/u/14709?v=4"},"body":"Jakub Narebski <jnareb@gmail.com> writes:\n\n> Nguyen Thai Ngoc Duy wrote:\n>> On Sun, Feb 24, 2008 at 5:03 PM, Jakub Narebski <jnareb@gmail.com> wrote:\n>>>\n>>> \"Nguyen Thai Ngoc Duy\" <pclouds@gmail.com> writes:\n>>>\n>>>> I'm going to implement subtree checkout. [...]\n>>>\n>>>  As far as I can see the problem lies in merging...\n>> \n>> Can you elaborate? I'm really noob at merging.\n>\n> What to do if when merging, or rebasing, there is conflict _outside_\n> checked out subtree?\n\nI suppose you have to forbid merges where anything non-trivial happens\noutside the tree (i.e. allow it only if the set of renamed or changed\nfiles is disjoint outside the tree, or only if only one of the\nbranches to merge have changes outside the tree).\n\nThat's probably not such a big limitation in practice for the user,\nsince by definition the user won't modify the files outside its tree,\nso he can at least still merge with the branch he branched from.\n\nI can see another problem: partial checkout is really interesting only\nif you can do a partial clone (\"partial\" here in the sense \"subtree\").\nOtherwise, your .git/ still eats your disk space and \"clone\" still\nneeds your bandwidth for something you won't use.\n\n-- \nMatthieu\n"},{"id":"69803","messageId":"200802241822.42594.robin.rosenberg.lists@dewire.com","threadId":"12289","inReplyTo":"vpqve4efiql.fsf@bauges.imag.fr","subject":"Re: on subtree checkout","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-02-24T17:22:42Z","receivedAt":"2008-02-24T17:22:42Z","isPatch":false,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"söndagen den 24 februari 2008 skrev Matthieu Moy:\n> I suppose you have to forbid merges where anything non-trivial happens\n> outside the tree (i.e. allow it only if the set of renamed or changed\n> files is disjoint outside the tree, or only if only one of the\n> branches to merge have changes outside the tree).\nOne still has to allow it, maybe forcing a bigger checkout in those\ncases.\n\n> That's probably not such a big limitation in practice for the user,\n> since by definition the user won't modify the files outside its tree,\n> so he can at least still merge with the branch he branched from.\nPartial checkout is for convenience and speed of worktree operations as \nI see it. Other people could have other reasons for it. Branch switching takes a lot of time with big repos, same thing with git status, add -u etc. Restricting the worktree scan for uninteresting parts speeds things up.\n\n> I can see another problem: partial checkout is really interesting only\n> if you can do a partial clone (\"partial\" here in the sense \"subtree\").\n> Otherwise, your .git/ still eats your disk space and \"clone\" still\n> needs your bandwidth for something you won't use.\n\nBetter and more of \"global\" operations on repos with submodules might make them more bearable, and maybe even convenient, for example doing a git diff\nover a set of submodules detecting renames between submodules.\n\n-- robin\n"},{"id":"69955","messageId":"alpine.DEB.1.00.0802260156350.3322@eeepc-johanness","threadId":"12289","inReplyTo":"fcaeb9bf0802240134i46e276ajfe83071e0b18ce61@mail.gmail.com","subject":"Re: on subtree checkout","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-02-26T01:59:10Z","receivedAt":"2008-02-26T01:59:10Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 24 Feb 2008, Nguyen Thai Ngoc Duy wrote:\n\n> I'm going to implement subtree checkout. The plan is to save \"index\n> prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n> when accessing the index. If I'm heading a wrong way, stop me now.\n\nAs I wrote a long time ago already, I think the correct approach would be \nto reuse the code for the core.ignoreStat feature.\n\nBut I agree with others that you should think about sane implementations \nof rebase/merge with partial checkouts.\n\nCiao,\nDscho\n"},{"id":"69959","messageId":"ee77f5c20802251830p47c6de60je97a31cb34bc3105@mail.gmail.com","threadId":"12289","inReplyTo":"alpine.DEB.1.00.0802260156350.3322@eeepc-johanness","subject":"Re: on subtree checkout","fromName":"David Symonds","fromEmail":"dsymonds@gmail.com","sentAt":"2008-02-26T02:30:36Z","receivedAt":"2008-02-26T02:30:36Z","isPatch":false,"sender":{"key":"dsymonds@gmail.com","avatar":"https://gravatar.com/avatar/b22f5051cbfc11836e36cf7a690e6cde4e225d835e13295ff98d15c7a9ee3c0f?d=mp&s=160"},"body":"On Mon, Feb 25, 2008 at 5:59 PM, Johannes Schindelin\n<Johannes.Schindelin@gmx.de> wrote:\n> Hi,\n>\n>\n>  On Sun, 24 Feb 2008, Nguyen Thai Ngoc Duy wrote:\n>\n>  > I'm going to implement subtree checkout. The plan is to save \"index\n>  > prefix\" in GIT_DIR/prefix and update git commands to use index prefix\n>  > when accessing the index. If I'm heading a wrong way, stop me now.\n>\n>  As I wrote a long time ago already, I think the correct approach would be\n>  to reuse the code for the core.ignoreStat feature.\n>\n>  But I agree with others that you should think about sane implementations\n>  of rebase/merge with partial checkouts.\n\nI, too, was shortly going to attempt a partial checkout/clone\nimplementation. The intended context of my implementation was similar\nto the KDE scenario in that you might only care about /pkgA and /pkgB,\nso changes to /pkgC are usually irrelevant and independent to your\nwork-flow, so I was planning to assume a simplistic \"theirs\" merge\nstrategy for /pkgC, etc.\n\n\nDave.\n"},{"id":"69977","messageId":"alpine.LSU.1.00.0802261119590.17164@racer.site","threadId":"12289","inReplyTo":"ee77f5c20802251830p47c6de60je97a31cb34bc3105@mail.gmail.com","subject":"Re: on subtree checkout","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-02-26T11:23:00Z","receivedAt":"2008-02-26T11:23:00Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 25 Feb 2008, David Symonds wrote:\n\n> On Mon, Feb 25, 2008 at 5:59 PM, Johannes Schindelin \n> <Johannes.Schindelin@gmx.de> wrote:\n> >\n> > But I agree with others that you should think about sane \n> > implementations of rebase/merge with partial checkouts.\n> \n> I, too, was shortly going to attempt a partial checkout/clone \n> implementation. The intended context of my implementation was similar to \n> the KDE scenario in that you might only care about /pkgA and /pkgB, so \n> changes to /pkgC are usually irrelevant and independent to your \n> work-flow, so I was planning to assume a simplistic \"theirs\" merge \n> strategy for /pkgC, etc.\n\nThat might work for the people who have partial checkouts.  But I see a \nlot of problems looming there: just imagine a documenter rebased on top of \n'master', and _then_ on top of a branch by another documenter, which is \nnewer with respect to documentation, but older with respect to the code.\n\nIt is _really_ easy to break code if you have no intention to test the \nresult of a merge, _especially_ so when it is a \"theirs\" strategy.\n\nCiao,\nDscho\n"}]}