{"thread":{"id":"1347","subject":"How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","startedAt":"2005-07-27T12:58:42Z","lastAt":"2005-08-15T23:55:55Z","messageCount":41,"participants":["Josef Weidendorfer","Junio C Hamano","Petr Baudis","Johannes Schindelin","Ryan Anderson","Matthias Urlichs","Carl Baldwin"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"6478","messageId":"200507271458.43063.Josef.Weidendorfer@gmx.de","threadId":"1347","inReplyTo":null,"subject":"How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Josef Weidendorfer","fromEmail":"josef.weidendorfer@gmx.de","sentAt":"2005-07-27T12:58:42Z","receivedAt":"2005-07-27T12:58:42Z","isPatch":false,"sender":{"key":"josef.weidendorfer@gmx.de","avatar":null},"body":"Hi,\n\nif I clone a remote head other than master via Cogito with\n\n\tcg-clone host:path#remoteHead,\n\nwork on this branch, and try to push back my changes with\n\n\tcg-push,\n\nI get the error\n\n\t\"pushing to a different head not supported yet\".\n\nAs far as I can see, there is no support in core GIT to make this ever work \n(at least with get-send-packs), as \"git-send-pack\" only updates a set of \nheads with the same name both locally and remote.\n\nI suppose the best would be to always keep the same head names in cloned \nrepositories - it seems to be easier to handle for users. Perhaps the only \nexception would be \"master\", as one probably would like to pull masters of \ndifferent remote repositories into a local one (without really working on \nthem).\n\nThus, what about the following: Each time a remote head other than master is \ncloned, a head with the same name is created locally which is an alias to the \nlocal master. This way, cg-push almost works out of the box. Following patch \nimplements this behavior.\n\nJosef\n\ndiff --git a/cg-clone b/cg-clone\n--- a/cg-clone\n+++ b/cg-clone\n@@ -69,5 +69,12 @@ cp $_git/refs/heads/origin $_git/refs/he\n git-read-tree HEAD\n git-checkout-cache -a\n git-update-cache --refresh\n\n echo \"Cloned to $dir/ (origin $location available as branch \\\"origin\\\")\"\n+\n+if echo \"$location\" | grep -q \"#\" ; then\n+       rembranch=$(echo \"$location\" | sed -e \"s/.*#//\")\n+       (cd $_git/refs/heads; ln -s master \"$rembranch\")\n+       echo \"Remote head \\\"$rbranch\\\" locally available as alias for \\\"master\\\"\"\n+fi\n+\ndiff --git a/cg-push b/cg-push\n--- a/cg-push\n+++ b/cg-push\n@@ -28,17 +28,18 @@ uri=$(cat \"$_git/branches/$name\" 2>/dev/\n\n rembranch=master\n if echo \"$uri\" | grep -q '#'; then\n        rembranch=$(echo $uri | cut -d '#' -f 2)\n        uri=$(echo $uri | cut -d '#' -f 1)\n-       die \"pushing to a different head not supported yet\"\n+        [ -s $_git/refs/heads/$rembranch ] || (cd $_git/refs/heads;ln -s master $rembranch)\n+        [ $(readlink $_git/refs/heads/$rembranch) = \"master\" ] || \\\n+          die \"can not push to remote head \\\"$rembranch\\\"\"\n fi\n\n if echo \"$uri\" | grep -q \"^http://\"; then\n        die \"pushing over HTTP not supported yet\"\n elif echo \"$uri\" | grep -q \"^git+ssh://\"; then\n        git-send-pack \"$(echo \"$uri\" | sed 's#^git+ssh://\\([^/]*\\)\\(/.*\\)$#\\1:\\2#')\" $rembranch\n-elif echo \"$uri\" | grep -q \":\"; then\n+elif echo \"$uri\" | grep -q \"^rsync://\"; then\n        die \"pushing over rsync not supported\"\n else\n        git-send-pack \"$uri\" $rembranch\n fi\n"},{"id":"6491","messageId":"7vll3rlnqm.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"200507271458.43063.Josef.Weidendorfer@gmx.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-28T01:32:01Z","receivedAt":"2005-07-28T01:32:01Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Josef Weidendorfer <Josef.Weidendorfer@gmx.de> writes:\n\n> As far as I can see, there is no support in core GIT to make this ever work \n> (at least with get-send-packs), as \"git-send-pack\" only updates a set of \n> heads with the same name both locally and remote.\n\nYes, it is my understanding that \"clone\" means to literally\nclone, not \"pull into an empty repository with renamed head\nnames\", to the core GIT.  I do not speak for Pasky, but Cogito's\n\"clone\" seems to have a bit different semantics (which I suspect\nis more friendly to the users in many situations).\n\nSimilarly, \"push\" to the core GIT (that is what git-send-pack is\nabout) means performing a subset of \"clone\" in reverse.  This is\nprimarily to synchronise two repositories owned by a single\nperson.\n"},{"id":"6499","messageId":"20050728120806.GA2391@pasky.ji.cz","threadId":"1347","inReplyTo":"7vll3rlnqm.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-28T12:08:07Z","receivedAt":"2005-07-28T12:08:07Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Wed, Jul 27, 2005 at 02:58:42PM CEST, I got a letter\nwhere Josef Weidendorfer <Josef.Weidendorfer@gmx.de> told me that...\n> Hi,\n\nHello,\n\n> if I clone a remote head other than master via Cogito with\n> \n> \tcg-clone host:path#remoteHead,\n> \n> work on this branch, and try to push back my changes with\n> \n> \tcg-push,\n> \n> I get the error\n> \n> \t\"pushing to a different head not supported yet\".\n> \n> As far as I can see, there is no support in core GIT to make this ever work \n> (at least with get-send-packs), as \"git-send-pack\" only updates a set of \n> heads with the same name both locally and remote.\n\nYes. It sucks. :-)\n\n> I suppose the best would be to always keep the same head names in cloned \n> repositories - it seems to be easier to handle for users. Perhaps the only \n> exception would be \"master\", as one probably would like to pull masters of \n> different remote repositories into a local one (without really working on \n> them).\n\nI think that would be quite confusing. I mean, you added a remote \"bar\"\nbranch under name \"foo\" by cg-branch-add, but suddenly, branch \"bar\"\nappears as well. Worse if you already have a different branch \"bar\".\n\n> Thus, what about the following: Each time a remote head other than master is \n> cloned, a head with the same name is created locally which is an alias to the \n> local master. This way, cg-push almost works out of the box. Following patch \n> implements this behavior.\n\nSee above. I would much rather see more flexible git-send-pack. Junio,\nwhat about changing its [heads]* parameter e.g. to\n[remotehead[:localhead]]* ?\n\nDear diary, on Thu, Jul 28, 2005 at 03:32:01AM CEST, I got a letter\nwhere Junio C Hamano <junkio@cox.net> told me that...\n> Josef Weidendorfer <Josef.Weidendorfer@gmx.de> writes:\n> \n> > As far as I can see, there is no support in core GIT to make this ever work \n> > (at least with get-send-packs), as \"git-send-pack\" only updates a set of \n> > heads with the same name both locally and remote.\n> \n> Yes, it is my understanding that \"clone\" means to literally\n> clone, not \"pull into an empty repository with renamed head\n> names\", to the core GIT.  I do not speak for Pasky, but Cogito's\n> \"clone\" seems to have a bit different semantics (which I suspect\n> is more friendly to the users in many situations).\n\ncg-clone serves only for initializing the repository from a remote\nsource initially.\n\n> Similarly, \"push\" to the core GIT (that is what git-send-pack is\n> about) means performing a subset of \"clone\" in reverse.  This is\n> primarily to synchronise two repositories owned by a single\n> person.\n\ncg-push aims to serve as a general pushing mechanism, which should work\nproperly even if multiple people push to a single repository.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6501","messageId":"Pine.LNX.4.58.0507281504100.25402@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"20050728120806.GA2391@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-28T13:07:01Z","receivedAt":"2005-07-28T13:07:01Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 28 Jul 2005, Petr Baudis wrote:\n\n> See above. I would much rather see more flexible git-send-pack. Junio,\n> what about changing its [heads]* parameter e.g. to\n> [remotehead[:localhead]]* ?\n\nIMHO this opens the door for shooting in your own foot. Isn't it much too\neasy to make a mistake with that syntax? What is so wrong with git-clone\nnot allowing you to name the HEAD differently?\n\nCiao,\nDscho\n"},{"id":"6507","messageId":"20050728153506.GL14229@pasky.ji.cz","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507281504100.25402@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-28T15:35:06Z","receivedAt":"2005-07-28T15:35:06Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 03:07:01PM CEST, I got a letter\nwhere Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n> Hi,\n\nHello,\n\n> On Thu, 28 Jul 2005, Petr Baudis wrote:\n> \n> > See above. I would much rather see more flexible git-send-pack. Junio,\n> > what about changing its [heads]* parameter e.g. to\n> > [remotehead[:localhead]]* ?\n> \n> IMHO this opens the door for shooting in your own foot. Isn't it much too\n> easy to make a mistake with that syntax?\n\nWhat mistake?\n\n> What is so wrong with git-clone not allowing you to name the HEAD\n> differently?\n\nDid you read the preceding discussion? When you are pushing from your\nmaster branch to a remote branch, it may well be called different over\nthere.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6508","messageId":"20050728153554.GM14229@pasky.ji.cz","threadId":"1347","inReplyTo":"20050728120806.GA2391@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-28T15:35:54Z","receivedAt":"2005-07-28T15:35:54Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 02:08:07PM CEST, I got a letter\nwhere Petr Baudis <pasky@suse.cz> told me that...\n> See above. I would much rather see more flexible git-send-pack. Junio,\n> what about changing its [heads]* parameter e.g. to\n> [remotehead[:localhead]]* ?\n\nOk, I was thinking backwards about it. I meant\n[localhead[:remotehead]]*, sorry. :-)\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6510","messageId":"Pine.LNX.4.58.0507281747320.29968@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"20050728153506.GL14229@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-28T15:56:21Z","receivedAt":"2005-07-28T15:56:21Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 28 Jul 2005, Petr Baudis wrote:\n\n> Dear diary, on Thu, Jul 28, 2005 at 03:07:01PM CEST, I got a letter\n> where Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n>\n> > On Thu, 28 Jul 2005, Petr Baudis wrote:\n> >\n> > > See above. I would much rather see more flexible git-send-pack. Junio,\n> > > what about changing its [heads]* parameter e.g. to\n> > > [remotehead[:localhead]]* ?\n> >\n> > IMHO this opens the door for shooting in your own foot. Isn't it much too\n> > easy to make a mistake with that syntax?\n>\n> What mistake?\n\nTo mix up different branches. With that syntax you can easily push changes\nonto the wrong head.\n\nI might well be wrong here, but I think the most common usage for git-push\nis to update a public repository, which is done by one or just a few\nmaintainer(s), in which case it is no problem to enforce\nlocalhead=remotehead. BTW, this whole multihead mess applies only to Jeffs\nanyway :-)\n\nI just do not see a high demand for mappings of remote and local HEAD\nnames, but rather a high potential of making mistakes (after all, it is\nnot the machine which makes mistakes, it's the human operator).\n\n> If you want the holes in your knowledge showing up try teaching\n> someone.  -- Alan Cox\n\nI like that one.\n\nCiao,\nDscho\n"},{"id":"6513","messageId":"7vwtnadi1y.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"20050728153506.GL14229@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-28T16:14:17Z","receivedAt":"2005-07-28T16:14:17Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> Dear diary, on Thu, Jul 28, 2005 at 03:07:01PM CEST, I got a letter\n> where Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n>> IMHO this opens the door for shooting in your own foot. Isn't it much too\n>> easy to make a mistake with that syntax?\n>\n> What mistake?\n>\n>> What is so wrong with git-clone not allowing you to name the HEAD\n>> differently?\n>\n> Did you read the preceding discussion? When you are pushing from your\n> master branch to a remote branch, it may well be called different over\n> there.\n\nThe real question is why you would even want to do that.\n\nManaging multiple heads and making sure which one is which even\non a single repository is a mental burden, at least to me.  When\nyou can name local and remote differently, the name mappings\nalso need to be managed in addition to that.  Yes, the mappings\ncan be automated by Porcelains, but that means we need to have\nanother configuration item around (which needs to be compatible\nacross Porcelains) to achieve that flexibility, but what does\nthat flexibility really buys you?\n\nMy gut feeling is that Johannes is right here, at least about\nthe send-pack side.  Storing \"master\" pulled from a remote under\na name different from the remote is a different story.  I do not\nhave much problem with that.\n"},{"id":"6526","messageId":"20050728161815.GC17952@pasky.ji.cz","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507281747320.29968@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-28T16:18:15Z","receivedAt":"2005-07-28T16:18:15Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 05:56:21PM CEST, I got a letter\nwhere Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n> Hi,\n\nHello,\n\n> On Thu, 28 Jul 2005, Petr Baudis wrote:\n> \n> > Dear diary, on Thu, Jul 28, 2005 at 03:07:01PM CEST, I got a letter\n> > where Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n> >\n> > > On Thu, 28 Jul 2005, Petr Baudis wrote:\n> > >\n> > > > See above. I would much rather see more flexible git-send-pack. Junio,\n> > > > what about changing its [heads]* parameter e.g. to\n> > > > [remotehead[:localhead]]* ?\n> > >\n> > > IMHO this opens the door for shooting in your own foot. Isn't it much too\n> > > easy to make a mistake with that syntax?\n> >\n> > What mistake?\n> \n> To mix up different branches. With that syntax you can easily push changes\n> onto the wrong head.\n\nHow? Only when you explicitly specify the remote head. When you're\nexplicit, you ought to know what are you doing.\n\n> I might well be wrong here, but I think the most common usage for git-push\n> is to update a public repository, which is done by one or just a few\n> maintainer(s), in which case it is no problem to enforce\n> localhead=remotehead. BTW, this whole multihead mess applies only to Jeffs\n> anyway :-)\n\nAFAIK the plan is to centralize all the kernel repositories to a single\none. For that, developers would generally push into branches with name\ndifferent that \"master\".\n\n> I just do not see a high demand for mappings of remote and local HEAD\n> names, but rather a high potential of making mistakes (after all, it is\n> not the machine which makes mistakes, it's the human operator).\n\nIf you fear making mistakes, better use something which attempts to do\nsome babysitting for you, like Cogito. ;-)\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6514","messageId":"20050728162345.GD17952@pasky.ji.cz","threadId":"1347","inReplyTo":"7vwtnadi1y.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-28T16:23:46Z","receivedAt":"2005-07-28T16:23:46Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 06:14:17PM CEST, I got a letter\nwhere Junio C Hamano <junkio@cox.net> told me that...\n> My gut feeling is that Johannes is right here, at least about\n> the send-pack side.  Storing \"master\" pulled from a remote under\n> a name different from the remote is a different story.  I do not\n> have much problem with that.\n\nBut that means you already have to manage the mapping anyway, with all\nthe burden of configuration items etc. And what if repository A has\nbranch 'foo' and repository B also has branch 'foo'?\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6516","messageId":"7v1x5ic1pe.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"20050728161815.GC17952@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-28T16:52:45Z","receivedAt":"2005-07-28T16:52:45Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> AFAIK the plan is to centralize all the kernel repositories to a single\n> one. For that, developers would generally push into branches with name\n> different that \"master\".\n\nI did not know about that plan, but that is interesting and now\nI understand why you think it is important to be able for more\nthan one person to push into a single repository.\n\nHow will the namespace of N-hundred branches in that repository\nbe managed?  To avoid collisions, wouldn't there be some\ncoordination, and there will be branch names there that\neverybody agrees that they are owned by you?\n\nAt that point, wouldn't it be easier for _you_ (as one kernel\ndeveloper who owns such globally unique branch names) to name\nyour branch you intend to push there the same way in your\nworking repository as well?\n"},{"id":"6518","messageId":"Pine.LNX.4.58.0507281931180.30371@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"7v1x5ic1pe.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-28T17:32:55Z","receivedAt":"2005-07-28T17:32:55Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 28 Jul 2005, Junio C Hamano wrote:\n\n> Petr Baudis <pasky@suse.cz> writes:\n>\n> > AFAIK the plan is to centralize all the kernel repositories to a single\n> > one. For that, developers would generally push into branches with name\n> > different that \"master\".\n>\n> I did not know about that plan, but that is interesting and now\n> I understand why you think it is important to be able for more\n> than one person to push into a single repository.\n\nIs it possible that those plans only mean to centralize .git/objects/ and\nleave the rest in single repositories? Seems much more sensible to me.\n\nCiao,\nDscho\n"},{"id":"6519","messageId":"20050728183904.GA24948@pasky.ji.cz","threadId":"1347","inReplyTo":"7v1x5ic1pe.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-28T18:39:04Z","receivedAt":"2005-07-28T18:39:04Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 06:52:45PM CEST, I got a letter\nwhere Junio C Hamano <junkio@cox.net> told me that...\n> Petr Baudis <pasky@suse.cz> writes:\n> \n> > AFAIK the plan is to centralize all the kernel repositories to a single\n> > one. For that, developers would generally push into branches with name\n> > different that \"master\".\n> \n> I did not know about that plan, but that is interesting and now\n> I understand why you think it is important to be able for more\n> than one person to push into a single repository.\n\nFor that particular thing, this is only part of the motivation. The much\nbigger part of the motivation are projects which don't have a central\nmaintainer but where group of people needs to be equal in access to a\ncentral repository. That's actually vast majority of larger projects, I\nthink.\n\n> How will the namespace of N-hundred branches in that repository\n> be managed?  To avoid collisions, wouldn't there be some\n> coordination, and there will be branch names there that\n> everybody agrees that they are owned by you?\n\nYou could name your branches e.g. \"davej/agpgart\", \"davej/cpufreq\", etc.\nBut those proposals of central repository were certainly quite\npreliminary, and perhaps I overstated saying \"the plan is\".\n\n> At that point, wouldn't it be easier for _you_ (as one kernel\n> developer who owns such globally unique branch names) to name\n> your branch you intend to push there the same way in your\n> working repository as well?\n\nAnd if you are cloning locally or whatever, you have to mention the\nbranch name explicitly.\n\nOne of the Cogito design bits is that branch name is something local to\nthe repository. When you are adding a branch, the local name you assign\nit is your private thing repository-wise, and doesn't have to have any\ncorrelation to other repositories you might interact width.\n\nAs I already argued, this helps when you are importing someone else's\nmaster as your branch called whatever (obviously not master), and if you\nhave to deal with two remote branches with the same name (such a\nconflict is bound to happen and bound to be vulnerable to be a huge\nhassle). That also applies to pushing, you might be pushing to multiple\nrepositories - say you are working on some cool kernel stuff for SuSE,\nso you might want to push to kernel.org _and_ into the deep bowels of\nsome SuSE kernel infrastructure (whatever - I'm not familiar with those\nthings yet if you are now drooling to get some insight about how this is\nworking in SuSE].\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6521","messageId":"20050728184525.GA3144@mythryan2.michonline.com","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507281931180.30371@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Ryan Anderson","fromEmail":"ryan@michonline.com","sentAt":"2005-07-28T18:45:25Z","receivedAt":"2005-07-28T18:45:25Z","isPatch":false,"sender":{"key":"ryan@michonline.com","avatar":null},"body":"On Thu, Jul 28, 2005 at 07:32:55PM +0200, Johannes Schindelin wrote:\n> Is it possible that those plans only mean to centralize .git/objects/ and\n> leave the rest in single repositories? Seems much more sensible to me.\n\nI think that's accurate.  It can be done without the repositories even\nreally noticing if \"git relink\" is used aggressively to migrate\nhard links into the repository regularly.  (Though, \"packs\" cause some\nconfusion in that scheme, I think.)\n\n\n-- \n\nRyan Anderson\n  sometimes Pug Majere\n"},{"id":"6520","messageId":"Pine.LNX.4.58.0507282047360.30638@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"20050728183904.GA24948@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-28T18:49:21Z","receivedAt":"2005-07-28T18:49:21Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 28 Jul 2005, Petr Baudis wrote:\n\n> For that particular thing, this is only part of the motivation. The much\n> bigger part of the motivation are projects which don't have a central\n> maintainer but where group of people needs to be equal in access to a\n> central repository. That's actually vast majority of larger projects, I\n> think.\n\nAre you really sure you want to slave git into being a \"better\nSubversion\"? IMHO, if you need a central repository, you should also have\none central HEAD.\n\nJust my tucence,\nDscho\n"},{"id":"6522","messageId":"Pine.LNX.4.58.0507282051290.30665@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"20050728184525.GA3144@mythryan2.michonline.com","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-28T18:51:49Z","receivedAt":"2005-07-28T18:51:49Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 28 Jul 2005, Ryan Anderson wrote:\n\n> On Thu, Jul 28, 2005 at 07:32:55PM +0200, Johannes Schindelin wrote:\n> > Is it possible that those plans only mean to centralize .git/objects/ and\n> > leave the rest in single repositories? Seems much more sensible to me.\n>\n> I think that's accurate.  It can be done without the repositories even\n> really noticing if \"git relink\" is used aggressively to migrate\n> hard links into the repository regularly.  (Though, \"packs\" cause some\n> confusion in that scheme, I think.)\n\nI guess that's where git-daemon comes into play.\n\nCiao,\nDscho\n"},{"id":"6523","messageId":"200507282053.56786.Josef.Weidendorfer@gmx.de","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507281747320.29968@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Josef Weidendorfer","fromEmail":"josef.weidendorfer@gmx.de","sentAt":"2005-07-28T18:53:56Z","receivedAt":"2005-07-28T18:53:56Z","isPatch":false,"sender":{"key":"josef.weidendorfer@gmx.de","avatar":null},"body":"On Thursday 28 July 2005 17:56, Johannes Schindelin wrote:\n> localhead=remotehead. BTW, this whole multihead mess applies only to Jeffs\n> anyway :-)\n\nGIT/Cogito usage is not about linux kernel only.\nI actually try to work with a scenario for a project with a few developers, \nwhere each one should have its branch(es) in the central repository. I think \nthis could be quite common among future GIT uses. I even would allow the few \ndevelopers to merge into the central master.\n\n> I just do not see a high demand for mappings of remote and local HEAD\n> names, but rather a high potential of making mistakes (after all, it is\n> not the machine which makes mistakes, it's the human operator).\n\nI also think it is quite confusing to have different branch names for the same \nhead in cloned repositories.\n\nBut I also think that Paskys scenario is real, where you want to pull branches \nin 2 remote repositories with the same name.\n\nSo why not put the name of the remote repository into the local branch name?\nA remote branch \"host1:path#branch1\" could be named \"host1:path#branch1\".\nThe shorthand specified with \"cg-add-branch\" would be a local alias, i.e.\n\t(cd .git/refs/heads; ln -s host1:path#branch1 mylocalalias)\n\nI even would find it handy to be able to say\n\tcg-pull host1:path#branch1\n, and\n\tcg-push mylocalbranch host2:path#branch2\nshould create the alias \"mylocalbranch\"=\"host2:path#branch2\"\nand create a entry in .git/branches.\n\nJosef\n"},{"id":"6524","messageId":"20050728191959.GB24948@pasky.ji.cz","threadId":"1347","inReplyTo":"200507282053.56786.Josef.Weidendorfer@gmx.de","subject":"Unnamed branches","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-28T19:19:59Z","receivedAt":"2005-07-28T19:19:59Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 08:53:56PM CEST, I got a letter\nwhere Josef Weidendorfer <Josef.Weidendorfer@gmx.de> told me that...\n> So why not put the name of the remote repository into the local branch name?\n> A remote branch \"host1:path#branch1\" could be named \"host1:path#branch1\".\n> The shorthand specified with \"cg-add-branch\" would be a local alias, i.e.\n> \t(cd .git/refs/heads; ln -s host1:path#branch1 mylocalalias)\n> \n> I even would find it handy to be able to say\n> \tcg-pull host1:path#branch1\n> , and\n> \tcg-push mylocalbranch host2:path#branch2\n> should create the alias \"mylocalbranch\"=\"host2:path#branch2\"\n> and create a entry in .git/branches.\n\n  This is a sensible argument, and I initially disallowed this mainly to\nsave some work. ;-) But I agree that something like this would be nice.\nThe issues:\n\n  * How to name the unnamed branches? You need some way to normalize\nURLs like http://www.kernel.org/pub/s%63m//cogito/ to something which is\nunique for a given location (http://www.kernel.org/pub/scm/cogito) and\nusable as filename - at least substituting the slashes for something,\nlike underscores, and encoding underscored by % sequences.\n\n  * Have all named remote branches as symlinks to their URLs (thus\neffectively also eliminating the need for .git/branches/), or keep them\nas they are? One disadvantage of the symlinks is that the refs/\ndirectory would become quite messy.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6528","messageId":"pan.2005.07.28.19.47.38.753705@smurf.noris.de","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507282047360.30638@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Matthias Urlichs","fromEmail":"smurf@smurf.noris.de","sentAt":"2005-07-28T19:47:40Z","receivedAt":"2005-07-28T19:47:40Z","isPatch":false,"sender":{"key":"matthias@urlichs.de","avatar":"https://gravatar.com/avatar/2708905af227313eba6f2b2ae0f7d0259b5ac5d71baef58fe5a13c699ce0bbf0?d=mp&s=160"},"body":"Hi, Johannes Schindelin wrote:\n\n> Are you really sure you want to slave git into being a \"better\n> Subversion\"?\n\nSince git is better than all of these, we should be able to easily write a\nSVN-like porcelain, so ... ;-)\n\n> IMHO, if you need a central repository, you should also have\n> one central HEAD.\n\nI disagree. Larger projects have multiple HEADs (stable, oldstable,\ndevelopment, ...). I don't like putting those in different repositories,\nyou end up with a heap of housekeeping effort to hardlink duplicate\nobjects, all of which is going to be wasted when different people run\n\"git repack\".\n\nNot everybody has 100-GB disks and multi-MB Internet pipes to play with...\n\n-- \nMatthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  smurf@smurf.noris.de\nDisclaimer: The quote was selected randomly. Really. | http://smurf.noris.de\n - -\nOn ability:\n\tA dwarf is small, even if he stands on a mountain top;\n\ta colossus keeps his height, even if he stands in a well.\n\t\t-- Lucius Annaeus Seneca, 4BC - 65AD\n"},{"id":"6529","messageId":"Pine.LNX.4.58.0507282201110.3005@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"pan.2005.07.28.19.47.38.753705@smurf.noris.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-28T20:14:35Z","receivedAt":"2005-07-28T20:14:35Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 28 Jul 2005, Matthias Urlichs wrote:\n\n> Hi, Johannes Schindelin wrote:\n>\n> Since git is better than all of these, we should be able to easily write a\n> SVN-like porcelain, so ... ;-)\n\nSorry, you're correct.\n\n> > IMHO, if you need a central repository, you should also have\n> > one central HEAD.\n>\n> I disagree. Larger projects have multiple HEADs (stable, oldstable,\n> development, ...). I don't like putting those in different repositories,\n> you end up with a heap of housekeeping effort to hardlink duplicate\n> objects, all of which is going to be wasted when different people run\n> \"git repack\".\n\nSorry again. I should have been clearer: If you have a larger project\nwhich does have production releases which have to be patched for a while,\nand thus need several branches, then there is still a *very good* reason\nnot to play games with the names of those branches or the tags.\n\nNaming the remote HEAD differently than the local HEAD is just *wrong*\nwhen you want to push back to them. I agree that it is a fine intellectual\nchallenge to keep juggling a few remote HEADs, and throw in a few local\nHEADs, but all that is *complicated*. And complicated things lead to\ncomplications.\n\nBTW I am a Jeff, I use git branches extensively in two projects.\n\nThe only sane way if you have to have different local and remote HEADs\nthat I can think of, would be to allow only the current local active HEAD\nto be pushed to a certain remote HEAD (preferably identified by a file in\n.git/branches).\n\nCiao,\nDscho\n"},{"id":"6532","messageId":"pan.2005.07.28.21.13.35.458701@smurf.noris.de","threadId":"1347","inReplyTo":"20050728161815.GC17952@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Matthias Urlichs","fromEmail":"smurf@smurf.noris.de","sentAt":"2005-07-28T21:13:38Z","receivedAt":"2005-07-28T21:13:38Z","isPatch":false,"sender":{"key":"matthias@urlichs.de","avatar":"https://gravatar.com/avatar/2708905af227313eba6f2b2ae0f7d0259b5ac5d71baef58fe5a13c699ce0bbf0?d=mp&s=160"},"body":"Hi, Petr Baudis wrote:\n\n> If you fear making mistakes, better use something which attempts to do\n> some babysitting for you, like Cogito. ;-)\n\nSome babysitting needs to be part of the core push protocol; anything else\nwould be prone to race conditions in a multiuser setting, esp. when people\nuse different porcelains.\n\nAt minimum, you'd send the old branch head with the new one, and let the\nserver not overwrite it if it changed in the meantime.\n\nThen, you'd kill porcelain writers who don't verify that the old head is\na(n indirect) parent of the new one. ;-)\n\n-- \nMatthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  smurf@smurf.noris.de\nDisclaimer: The quote was selected randomly. Really. | http://smurf.noris.de\n - -\nMadness takes its toll. Please have exact change.\n"},{"id":"6541","messageId":"7v4qaeqrh3.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"20050728183904.GA24948@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-29T02:24:40Z","receivedAt":"2005-07-29T02:24:40Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> One of the Cogito design bits is that branch name is something local to\n> the repository. When you are adding a branch, the local name you assign\n> it is your private thing repository-wise, and doesn't have to have any\n> correlation to other repositories you might interact width.\n\nI do not disagree with that.  I think branch name is mostly a\nlocal matter.  However, I happen to think that two repositories\nyou use send-pack (not clone which uses completely different\nprotocol) to sync one from the other are semantically equivalent\nones, except that the destination may be a strict subset.  I\nthink of it as \"a copy I throw at a public place to show what I\nhave in my private repository I work in\", so,...\n"},{"id":"6549","messageId":"20050729070628.GA24895@pasky.ji.cz","threadId":"1347","inReplyTo":"7v4qaeqrh3.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-29T07:06:29Z","receivedAt":"2005-07-29T07:06:29Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Fri, Jul 29, 2005 at 04:24:40AM CEST, I got a letter\nwhere Junio C Hamano <junkio@cox.net> told me that...\n> Petr Baudis <pasky@suse.cz> writes:\n> \n> > One of the Cogito design bits is that branch name is something local to\n> > the repository. When you are adding a branch, the local name you assign\n> > it is your private thing repository-wise, and doesn't have to have any\n> > correlation to other repositories you might interact width.\n> \n> I do not disagree with that.  I think branch name is mostly a\n> local matter.  However, I happen to think that two repositories\n> you use send-pack (not clone which uses completely different\n> protocol) to sync one from the other are semantically equivalent\n> ones, except that the destination may be a strict subset.  I\n> think of it as \"a copy I throw at a public place to show what I\n> have in my private repository I work in\", so,...\n\nAha, so it seems our problem is hopefully only in terminology, great.\n\nSo, what do you mean by \"clone\" here? And what command should I use for\npushing then?\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6550","messageId":"20050729071136.GB24895@pasky.ji.cz","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507282201110.3005@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-29T07:11:36Z","receivedAt":"2005-07-29T07:11:36Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 10:14:35PM CEST, I got a letter\nwhere Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n> Hi,\n\nHello,\n\n> Naming the remote HEAD differently than the local HEAD is just *wrong*\n> when you want to push back to them.\n\nBut you might not know that in advance. That's one of they key points of\nthe distributed systems, after all - when you are cloning, you needn't\nknow in advance that you will want to do local commits, and don't need\nupstream approval. You also might not know in advance that you will want\nto push them back. Sure, distributed systems are more complicated. If\nyou don't like complicated things, there's always RCS. ;-)\n\n> The only sane way if you have to have different local and remote HEADs\n> that I can think of, would be to allow only the current local active HEAD\n> to be pushed to a certain remote HEAD (preferably identified by a file in\n> .git/branches).\n\nWell, but (if I understand you correctly) that was always the _point_.\nIt's what I was talking about all the time. :-)\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6551","messageId":"20050729071438.GC24895@pasky.ji.cz","threadId":"1347","inReplyTo":"pan.2005.07.28.21.13.35.458701@smurf.noris.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-29T07:14:39Z","receivedAt":"2005-07-29T07:14:39Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Thu, Jul 28, 2005 at 11:13:38PM CEST, I got a letter\nwhere Matthias Urlichs <smurf@smurf.noris.de> told me that...\n> Then, you'd kill porcelain writers who don't verify that the old head is\n> a(n indirect) parent of the new one. ;-)\n\nsend-pack.c:\n\n\tif (!ref_newer(new_sha1, ref->old_sha1)) {\n\t\terror(\"remote '%s' isn't a strict parent of local\", name);\n\t\tcontinue;\n\t}\n\n\"git-core: Making life nice for Porcelains.\"\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6557","messageId":"7vmzo6jbme.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"20050729070628.GA24895@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-29T07:48:57Z","receivedAt":"2005-07-29T07:48:57Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> Aha, so it seems our problem is hopefully only in terminology, great.\n>\n> So, what do you mean by \"clone\" here? And what command should I use for\n> pushing then?\n\nNotice I never used the word \"clone\" in what I said.\n\nWhat I mean by \"a semantically equivalent two repositories,\npotentially one being a strict subset of the other\" is you can\npull head A from one or head A from the other and can get the\nsame result (although one may and the other may not have head\nB).  And naturally you use send-pack for pushing.\n\nIf I \"clone\" from repository A to create a repository B, I would\nnever \"push back\" from B to A.  Instead I would ask a person who\nowns A to \"pull from B\".  My impression is the patch flow in the\nkernel circle works like that (although I have never been in\nthat circle).\n\nNow, A may happen to be on my home machine and B may happen be\non my notebook, meaning the owner of A and B are both myself.\nBut even in that case I would still work by \"pulling from A\"\nwhen I am on B, and \"pulling from B\" when I am on A.  In other\nwords, \"pulling\" is the only patch flow mechanism I would use.\nPushing is only for publication and I treat it as just a\nGIT-aware rsync/mirror, nothing more.  I have a feeling that\nyour workflow is different and you plan to use both push and\npull for normal patch flows.  This distinction is probably where\nthe disagreement comes from.\n\nAnd I strongly suspect that the primary reason that I \"simply do\nnot get it\" after reading your messages is because my mental\nmodel is strongly molded into what Linus taught us.  I have to\nunlearn things...\n"},{"id":"6560","messageId":"20050729081051.GH24895@pasky.ji.cz","threadId":"1347","inReplyTo":"7vmzo6jbme.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-29T08:10:51Z","receivedAt":"2005-07-29T08:10:51Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Fri, Jul 29, 2005 at 09:48:57AM CEST, I got a letter\nwhere Junio C Hamano <junkio@cox.net> told me that...\n> Petr Baudis <pasky@suse.cz> writes:\n> \n> > Aha, so it seems our problem is hopefully only in terminology, great.\n> >\n> > So, what do you mean by \"clone\" here? And what command should I use for\n> > pushing then?\n> \n> Notice I never used the word \"clone\" in what I said.\n\n> > However, I happen to think that two repositories\n> > you use send-pack (not _CLONE_ which uses completely different\n> > protocol)\n\n(emphasis mine ;-)\n\n> Now, A may happen to be on my home machine and B may happen be\n> on my notebook, meaning the owner of A and B are both myself.\n> But even in that case I would still work by \"pulling from A\"\n> when I am on B, and \"pulling from B\" when I am on A.  In other\n> words, \"pulling\" is the only patch flow mechanism I would use.\n\nI use cg-push on my notebook, given that the notebook might not happen\nto have public IP address in some cases, or might be behind some\ncorporate firewall, or that I'm lazy to ssh to my home machine in order\nto pull.\n\n> Pushing is only for publication and I treat it as just a\n> GIT-aware rsync/mirror, nothing more.  I have a feeling that\n> your workflow is different and you plan to use both push and\n> pull for normal patch flows.  This distinction is probably where\n> the disagreement comes from.\n\nExactly. I want much more freedom in pushing, the only requirement being\nthat \"the to-be-replaced remote head is ancestor of the to-be-pushed\nlocal head\". I think (am I wrong?) git-send-pack localhead:remotehead\nwould work just fine for me, the only thing I need is the support for\ndifferent local and remote head names.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6566","messageId":"7vek9igfgw.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"20050729081051.GH24895@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-29T08:54:07Z","receivedAt":"2005-07-29T08:54:07Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> Exactly. I want much more freedom in pushing, the only requirement being\n> that \"the to-be-replaced remote head is ancestor of the to-be-pushed\n> local head\". I think (am I wrong?) git-send-pack localhead:remotehead\n> would work just fine for me, the only thing I need is the support for\n> different local and remote head names.\n\nNow I see where you are coming from; I tend to agree why you\nmight want to have different names on the remote end.  I however\nstill suspect that you might be spreading chaos under the name\nof more flexibility.  The fact that you can push into it by\ndefinition means you have some control over the other end, and\nobviously you are in total control on your end.  I do not see\nwhy you cannot rename branches where needed so that whatever you\nare pushing match.  That would also be one less thing to keep\ntrack of for yourself [*1*].\n\nYes, I am aware that you brought up the example of pushing to\ntwo separate places, but does it happen in practice that you can\npush to two places, and at the same time neither of them\ncooperates with you to make it easier for you to work on these\nthree machines by having the same head names?\n\nHaving said that, I do not particulary think allowing push to\nwrite into different ref is an unreasonable thing.  As you\npointed out long time ago when send-pack was first done, the\nprotocol is not so easily extensible, so this may require either\nbackward incompatible protocol change, or introduction of a new\nprogram pair send-pack-2 / receive-pack-2.  I'll take a look\nsometime this weekend.  Bedtime.\n\n\n[Footnote]\n\n*1* In a hypothetical situation ``I use branch \"b00\" in this\nrepository to do XYZ work but I use branch \"b24\" in the other\nrepository for the same XYZ work'', Porcelain can keep track of\nmapping between b00:b24 for you, but you still need to keep\ntrack of b00:XYZ and b24:XYZ mapping in your head.\n"},{"id":"6570","messageId":"200507291110.08417.Josef.Weidendorfer@gmx.de","threadId":"1347","inReplyTo":"7vmzo6jbme.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Josef Weidendorfer","fromEmail":"josef.weidendorfer@gmx.de","sentAt":"2005-07-29T09:10:08Z","receivedAt":"2005-07-29T09:10:08Z","isPatch":false,"sender":{"key":"josef.weidendorfer@gmx.de","avatar":null},"body":"Hi,\n\nOn Friday 29 July 2005 09:48, you wrote:\n> Petr Baudis <pasky@suse.cz> writes:\n> > So, what do you mean by \"clone\" here? And what command should I use for\n> > pushing then?\n...\n> Now, A may happen to be on my home machine and B may happen be\n> on my notebook, meaning the owner of A and B are both myself.\n> But even in that case I would still work by \"pulling from A\"\n> when I am on B, and \"pulling from B\" when I am on A.  In other\n> words, \"pulling\" is the only patch flow mechanism I would use.\n\nOK, that is your opinion and your work flow. But porcelains perhaps would like \nto allow other work flows, even if it seems confusing for you.\n\nAnd I think the problem here simple is that send-pack *forces* local and \nremote head names to be the same. This is forcing policy to porcelains, but \nGIT should be only about plumbing.\n\nPerhaps the solution is to allow more flexibility in GIT.\nWhat about introducing an additional environment GIT_REFS_DIR?\nWhen using send-pack, the porcelain would set this variable to a directory \ncontaining a 1:1 name relationship to the remote repository.\n\nJosef\n"},{"id":"6572","messageId":"20050729094046.GO24895@pasky.ji.cz","threadId":"1347","inReplyTo":"7vek9igfgw.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-29T09:40:46Z","receivedAt":"2005-07-29T09:40:46Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Fri, Jul 29, 2005 at 10:54:07AM CEST, I got a letter\nwhere Junio C Hamano <junkio@cox.net> told me that...\n> I however still suspect that you might be spreading chaos under the\n> name of more flexibility.\n\nI'm such a villain! ;-))\n\n> The fact that you can push into it by definition means you have some\n> control over the other end, and obviously you are in total control on\n> your end.  I do not see why you cannot rename branches where needed so\n> that whatever you are pushing match.  That would also be one less\n> thing to keep track of for yourself [*1*].\n\nYou might get the push access rather lately in the process (this \"lazy\ndevelopment privileges granting\" is one of the point of distributed\nVCSes), at point where other people are used to pull from you and\nrenaming your branch locally might mean some trouble.\n\n> Yes, I am aware that you brought up the example of pushing to\n> two separate places, but does it happen in practice that you can\n> push to two places, and at the same time neither of them\n> cooperates with you to make it easier for you to work on these\n> three machines by having the same head names?\n\nYes, they may have incompatible but strict head naming conventions. And\nwouldn't it be easier to just have different head names rather than\nforcing to increase administrative load 'n stuff?\n\n> [Footnote]\n> \n> *1* In a hypothetical situation ``I use branch \"b00\" in this\n> repository to do XYZ work but I use branch \"b24\" in the other\n> repository for the same XYZ work'', Porcelain can keep track of\n> mapping between b00:b24 for you, but you still need to keep\n> track of b00:XYZ and b24:XYZ mapping in your head.\n\nI think 95% of the cases will be \"master locally, non-master remotely\".\nThat's not really that difficult at all.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6576","messageId":"Pine.LNX.4.58.0507291254100.5849@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"20050729094046.GO24895@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-29T10:57:50Z","receivedAt":"2005-07-29T10:57:50Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 29 Jul 2005, Petr Baudis wrote:\n\n> You might get the push access rather lately in the process (this \"lazy\n> development privileges granting\" is one of the point of distributed\n> VCSes), at point where other people are used to pull from you and\n> renaming your branch locally might mean some trouble.\n\nI still do not get it. What is so wrong with\n\n\tgit-switch-tree remotehead\n\tgit-merge master\n\tgit-push remoteside remotehead\n\nwhich would have the further advantage of documenting what you really did\nin the history.\n\nAnd if you really want to be able to spread chaos in your own head, you\ncan do something like\n\n\tln -s master .git/refs/heads/remotehead\n\tgit-push remoteside remotehead\n\nA change in the protocol is not needed IMHO, and the protocol itself\nsuggests that you rather use a simple setup. After all, Murphy is lurking\nbehind every bash script!\n\nCiao,\nDscho\n"},{"id":"6580","messageId":"20050729111304.GS24895@pasky.ji.cz","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507291254100.5849@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-29T11:13:04Z","receivedAt":"2005-07-29T11:13:04Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Fri, Jul 29, 2005 at 12:57:50PM CEST, I got a letter\nwhere Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n> Hi,\n\nHello,\n\n> On Fri, 29 Jul 2005, Petr Baudis wrote:\n> \n> > You might get the push access rather lately in the process (this \"lazy\n> > development privileges granting\" is one of the point of distributed\n> > VCSes), at point where other people are used to pull from you and\n> > renaming your branch locally might mean some trouble.\n> \n> I still do not get it. What is so wrong with\n> \n> \tgit-switch-tree remotehead\n> \tgit-merge master\n> \tgit-push remoteside remotehead\n> \n> which would have the further advantage of documenting what you really did\n> in the history.\n\nHow would that document anything normal push wouldn't?\n\n> And if you really want to be able to spread chaos in your own head, you\n> can do something like\n> \n> \tln -s master .git/refs/heads/remotehead\n> \tgit-push remoteside remotehead\n\nI'd argue that's much more messy and evil than pushing to heads with\ndifferent names. If you compare what you just proposed with pushing to\nheads with different names, what's the advantage?\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6581","messageId":"Pine.LNX.4.58.0507291424070.6247@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"20050729111304.GS24895@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-07-29T12:26:51Z","receivedAt":"2005-07-29T12:26:51Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 29 Jul 2005, Petr Baudis wrote:\n\n> Dear diary, on Fri, Jul 29, 2005 at 12:57:50PM CEST, I got a letter\n> where Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n>\n> > \tgit-switch-tree remotehead\n> > \tgit-merge master\n> > \tgit-push remoteside remotehead\n> >\n> > which would have the further advantage of documenting what you really did\n> > in the history.\n>\n> How would that document anything normal push wouldn't?\n\ngit-merge?\n\n> > And if you really want to be able to spread chaos in your own head, you\n> > can do something like\n> >\n> > \tln -s master .git/refs/heads/remotehead\n> > \tgit-push remoteside remotehead\n>\n> I'd argue that's much more messy and evil than pushing to heads with\n> different names. If you compare what you just proposed with pushing to\n> heads with different names, what's the advantage?\n\nIt makes it hard. It tells you to be real careful here. It tells you that\nyou are not babysitted from here on.\n\nCiao,\nDscho\n"},{"id":"6582","messageId":"20050729122844.GA21909@pasky.ji.cz","threadId":"1347","inReplyTo":"Pine.LNX.4.58.0507291424070.6247@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2005-07-29T12:28:44Z","receivedAt":"2005-07-29T12:28:44Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Fri, Jul 29, 2005 at 02:26:51PM CEST, I got a letter\nwhere Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n> Hi,\n> \n> On Fri, 29 Jul 2005, Petr Baudis wrote:\n> \n> > Dear diary, on Fri, Jul 29, 2005 at 12:57:50PM CEST, I got a letter\n> > where Johannes Schindelin <Johannes.Schindelin@gmx.de> told me that...\n> >\n> > > \tgit-switch-tree remotehead\n> > > \tgit-merge master\n> > > \tgit-push remoteside remotehead\n> > >\n> > > which would have the further advantage of documenting what you really did\n> > > in the history.\n> >\n> > How would that document anything normal push wouldn't?\n> \n> git-merge?\n\nYou have to git-merge anyway if remote head is not your ancestor yet,\notherwise the push cannot proceed.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nIf you want the holes in your knowledge showing up try teaching\nsomeone.  -- Alan Cox\n"},{"id":"6607","messageId":"pan.2005.07.29.20.40.11.910646@smurf.noris.de","threadId":"1347","inReplyTo":"7vek9igfgw.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Matthias Urlichs","fromEmail":"smurf@smurf.noris.de","sentAt":"2005-07-29T20:40:13Z","receivedAt":"2005-07-29T20:40:13Z","isPatch":false,"sender":{"key":"matthias@urlichs.de","avatar":"https://gravatar.com/avatar/2708905af227313eba6f2b2ae0f7d0259b5ac5d71baef58fe5a13c699ce0bbf0?d=mp&s=160"},"body":"Hi, Junio C Hamano wrote:\n\n> Porcelain can keep track of\n> mapping between b00:b24 for you,\n\nExactly.\n\n> but you still need to keep\n> track of b00:XYZ and b24:XYZ mapping in your head.\n\nThis is why I name my local branch \"XYZ\". ;-)\n\nXYZ may not be an appropriate name for the remote branch, or maybe the\nremote repo is *not* under my direct control, e.g. a shared-master style\nsetup.\n\n-- \nMatthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  smurf@smurf.noris.de\nDisclaimer: The quote was selected randomly. Really. | http://smurf.noris.de\n - -\n:munch: vt. [often confused with {mung}, q.v.] To transform information\n   in a serial fashion, often requiring large amounts of computation. To\n   trace down a data structure. Related to {crunch} and nearly synonymous\n   with {grovel}, but connotes less pain.\n"},{"id":"6619","messageId":"7vll3p82ma.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"20050729122844.GA21909@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-30T02:11:09Z","receivedAt":"2005-07-30T02:11:09Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n>> > How would that document anything normal push wouldn't?\n>> \n>> git-merge?\n>\n> You have to git-merge anyway if remote head is not your ancestor yet,\n> otherwise the push cannot proceed.\n\nIndeed.  And if git-merge fast forwards, then you would not get\nany trail, so the \"documentation by merge\" argument does not\nstand.\n"},{"id":"6647","messageId":"7vfytwym5r.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"7vek9igfgw.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-07-30T22:16:48Z","receivedAt":"2005-07-30T22:16:48Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <junkio@cox.net> writes:\n\n> Having said that, I do not particulary think allowing push to\n> write into different ref is an unreasonable thing.  As you\n> pointed out long time ago when send-pack was first done, the\n> protocol is not so easily extensible, so this may require either\n> backward incompatible protocol change, or introduction of a new\n> program pair send-pack-2 / receive-pack-2.  I'll take a look\n> sometime this weekend.  Bedtime.\n\nAgain, what Linus designed turns out to be perfect.  It does not\nappear to need a protocol level change at all.  I'll code up\nsomething over the weekend if I am lucky.\n"},{"id":"7166","messageId":"20050813041114.GA29412@hpsvcnb.fc.hp.com","threadId":"1347","inReplyTo":"20050729081051.GH24895@pasky.ji.cz","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Carl Baldwin","fromEmail":"cnb@fc.hp.com","sentAt":"2005-08-13T04:11:14Z","receivedAt":"2005-08-13T04:11:14Z","isPatch":false,"sender":{"key":"cnb@fc.hp.com","avatar":null},"body":"On Fri, Jul 29, 2005 at 08:10:51AM +0000, Petr Baudis wrote:\n> Exactly. I want much more freedom in pushing, the only requirement being\n> that \"the to-be-replaced remote head is ancestor of the to-be-pushed\n> local head\". I think (am I wrong?) git-send-pack localhead:remotehead\n> would work just fine for me, the only thing I need is the support for\n> different local and remote head names.\n\nGreetings,\n\nSorry to join the game so late.  I've only read this thread now.\n\nIt seems to me that this is the way to go.  Several have mentioned that\nhead names should be the same on the remote and the local side.\nHowever, I wanted to point out that it may be impossible to keep these\nnames in sync due to the 'loosely knit' nature of the types of projects\nthat are likely to use git.\n\nIt seems that the requirement that the remote head be a strict ancestor\nof the local head is actually quite strong and should avoid mistakes\nlike pushing to the wrong head.\n\nAnyway, those are my two cents.  I couldn't tell wether a resolution had\nbeen achieved so I thought I would pipe up.\n\nCarl\n\n-- \n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n Carl Baldwin                        Systems VLSI Laboratory\n Hewlett Packard Company\n MS 88                               work: 970 898-1523\n 3404 E. Harmony Rd.                 work: Carl.N.Baldwin@hp.com\n Fort Collins, CO 80525              home: Carl@ecBaldwin.net\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n"},{"id":"7177","messageId":"7vacjmqnu7.fsf@assigned-by-dhcp.cox.net","threadId":"1347","inReplyTo":"20050813041114.GA29412@hpsvcnb.fc.hp.com","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-08-13T07:48:32Z","receivedAt":"2005-08-13T07:48:32Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carl Baldwin <cnb@fc.hp.com> writes:\n\n> On Fri, Jul 29, 2005 at 08:10:51AM +0000, Petr Baudis wrote:\n>> Exactly. I want much more freedom in pushing, the only requirement being\n>> that \"the to-be-replaced remote head is ancestor of the to-be-pushed\n>> local head\". I think (am I wrong?) git-send-pack localhead:remotehead\n>> would work just fine for me, the only thing I need is the support for\n>> different local and remote head names.\n>\n> Sorry to join the game so late.  I've only read this thread now.\n\nJust in case you have not noticed, the push in 0.99.4 and\nonwards does exactly that.  Please see git-push-script.txt in\nthe Documentation/ directory --- oops, there is no such thing.\n\nPlease see git-send-pack.txt instead, and if you feel like it, I\nwould appreciate a patch to add the missing documentation for\ngit-push-script ;-).\n\nWhat's not supported well yet is the opposite --- downloading\nmultiple refs and dealing with them.\n\nJohannes Schindelin calls this \"reverse push\", and I think that\nis really a good name to describe what it does.  It takes a\nremote repository and possibly multiple refs, downloads the\nobjects to complete the named remote references, and updates the\nlocal refs only if the remote refs are fast forward children of\nthe local refs being replaced, just like \"push\" fast forwards\nthe remote refs using the local refs.  In other words, given\n<src> and <dst> repository, the following should do the same\nthing:\n\n    On <src> repository machine, with GIT_DIR being the <src> repository:\n    $ git push <dst> <ref-local-name>:<ref-remote-name>...\n\n    On <dst> repository machine, with GIT_DIR being the <dst> repository:\n    $ git pull <src> <ref-remote-name>:<ref-local-name>...\n\nJohannes posted a script on the list a couple of days ago, which\nshould work well, except that it was written before the\ngit-fetch-pack command was updated to natively download from\nmultiple refs, so it does not know how to fetch multiple refs at\na one go.\n\n-jc\n"},{"id":"7301","messageId":"20050815162324.GA9857@hpsvcnb.fc.hp.com","threadId":"1347","inReplyTo":"7vacjmqnu7.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Carl Baldwin","fromEmail":"cnb@fc.hp.com","sentAt":"2005-08-15T16:23:24Z","receivedAt":"2005-08-15T16:23:24Z","isPatch":false,"sender":{"key":"cnb@fc.hp.com","avatar":null},"body":"Over the week-end, I was thinking about the thread \"Re: How is working\non arbitrary remote heads supposed to work in Cogito\".  I wanted to\nweigh in an opinion that I've developed on it but thought it deserved a\nnew thread.\n\nSomewhere in the thread something was mentioned about maintaining\n<local branch>:<remote branch> pairs in the git repository when pushes\nand pulls are performed.  I think the argument was actually against\nkeeping this information and ultimately against allowing pushes to a\nbranch of a different name.\n\nI wanted to weigh in with why it would be a good idea to make note of\nthis information.  The only thing that would be required of the plumbing\nis to specify how this information is kept and if a push or pull is\nperformed directly with git then make note of the push/pull\nrelationship.  Everything else would be up to the porcelains.\n\nSo, I envision a simple directed graph where nodes represent the\nbranches (wether local or remote) and the edges represent push or pull\nrelationships between branches.\n\nGit already stores the nodes.\n\nThe edges, in theory, would spring into existence when a push or pull is\nperformed between two branches for the first time.\n\nThis graph will be extremely useful for manageing flow in a project.  It\ncould enable something as simple as a script that would walk the edges\nand tell which ones have fallen behind.  It would also be possible to\neasily pull up a visual representation of the graph (with graphviz,\nmaybe).  This sort of thing might prove to be a valuable orientation\ntool for the developer or project manager.\n\nIt could also enable some very powerful project flow management --- in a\nporcelain of course --- that would manage flow from an engineer's own\nsand-box through software engineering 'gates' such as integration,\nquality assurance, product maintenance and the documentation and\nsign-offs required to pass through each of these gates.\n\nIt could also be used to aid in documenting and managing the, already\nexistent, linux tree development flow in whatever way suits.\n\nThis is a big return on investment.  Little would be required of the\nplumbing to maintain these 'edges', just add to them when it performs a\npush/pull on an edge that hasn't already been recorded.  Any changes or\ndeletions could be handled by the user or by some porcelain.\n\nI think it is important, though, to specify how this information should\nbe stored to maintain compatibility between porcelains while (hopefully)\nallowing for some degree of flexibility.  I don't yet know where this\nline should be drawn.\n\nCarl\n\nOn Sat, Aug 13, 2005 at 12:48:32AM -0700, Junio C Hamano wrote:\n> Carl Baldwin <cnb@fc.hp.com> writes:\n> \n> > On Fri, Jul 29, 2005 at 08:10:51AM +0000, Petr Baudis wrote:\n> >> Exactly. I want much more freedom in pushing, the only requirement being\n> >> that \"the to-be-replaced remote head is ancestor of the to-be-pushed\n> >> local head\". I think (am I wrong?) git-send-pack localhead:remotehead\n> >> would work just fine for me, the only thing I need is the support for\n> >> different local and remote head names.\n> >\n> > Sorry to join the game so late.  I've only read this thread now.\n> \n> Just in case you have not noticed, the push in 0.99.4 and\n> onwards does exactly that.  Please see git-push-script.txt in\n> the Documentation/ directory --- oops, there is no such thing.\n> \n> Please see git-send-pack.txt instead, and if you feel like it, I\n> would appreciate a patch to add the missing documentation for\n> git-push-script ;-).\n> \n> What's not supported well yet is the opposite --- downloading\n> multiple refs and dealing with them.\n> \n> Johannes Schindelin calls this \"reverse push\", and I think that\n> is really a good name to describe what it does.  It takes a\n> remote repository and possibly multiple refs, downloads the\n> objects to complete the named remote references, and updates the\n> local refs only if the remote refs are fast forward children of\n> the local refs being replaced, just like \"push\" fast forwards\n> the remote refs using the local refs.  In other words, given\n> <src> and <dst> repository, the following should do the same\n> thing:\n> \n>     On <src> repository machine, with GIT_DIR being the <src> repository:\n>     $ git push <dst> <ref-local-name>:<ref-remote-name>...\n> \n>     On <dst> repository machine, with GIT_DIR being the <dst> repository:\n>     $ git pull <src> <ref-remote-name>:<ref-local-name>...\n> \n> Johannes posted a script on the list a couple of days ago, which\n> should work well, except that it was written before the\n> git-fetch-pack command was updated to natively download from\n> multiple refs, so it does not know how to fetch multiple refs at\n> a one go.\n> \n> -jc\n> \n\n-- \n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n Carl Baldwin                        Systems VLSI Laboratory\n Hewlett Packard Company\n MS 88                               work: 970 898-1523\n 3404 E. Harmony Rd.                 work: Carl.N.Baldwin@hp.com\n Fort Collins, CO 80525              home: Carl@ecBaldwin.net\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n"},{"id":"7327","messageId":"Pine.LNX.4.63.0508160153000.26580@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1347","inReplyTo":"7vacjmqnu7.fsf@assigned-by-dhcp.cox.net","subject":"Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-08-15T23:55:55Z","receivedAt":"2005-08-15T23:55:55Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sat, 13 Aug 2005, Junio C Hamano wrote:\n\n> Johannes posted a script on the list a couple of days ago, which\n> should work well, except that it was written before the\n> git-fetch-pack command was updated to natively download from\n> multiple refs, so it does not know how to fetch multiple refs at\n> a one go.\n\nActually, my script usually only calls fetch once. It checks if the commit \nobject is already local before trying to fetch it, and it turns out that a \nsingle fetch is often (always?) sufficient to slurp the other commits, \ntoo. I did not have time to find out if that is a true bug in git.\n\nCiao,\nDscho\n"}]}