Re: Managing multiple branches in git
От | Robert Haas |
---|---|
Тема | Re: Managing multiple branches in git |
Дата | |
Msg-id | 603c8f070906021517g641367e9r906ca8ad76e40a4a@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Managing multiple branches in git (Ron Mayer <rm_pg@cheapcomplexdevices.com>) |
Список | pgsql-hackers |
On Tue, Jun 2, 2009 at 5:28 PM, Ron Mayer <rm_pg@cheapcomplexdevices.com> wrote: > Robert Haas wrote: >> And, unfortunately, I'm not sure there's a good solution. Tom could >> create 1 local repository cloned from the origin and then N-1 copies >> cloned with --local from that one, but this sort of defeats the >> purpose of using git, because now if he commits a change to one of >> them and then wants to apply that change to each back branch, he's got >> to fetch that change on each one, cherry-pick it, make his changes, >> commit, and then push it back to his main repository. Some of this > > Why has he got to do this pushing back to his main? How about > > creating 1 local repository from Origin, > create N-1 cloned with --local from that one > for each of those "--local" ones, "git-remote add" the main origin > > From then ISTM his workflow is very similar to the way he does with CVS, > pulling and pushing from those multiple repositories to the central > origin. He can creating the patches/diffs to apply to each the same > way he does today. > > ISTM he'd mostly be unaware that these repositories were ever connected > in some way unless he inspected that some of the files in .git had the > same inodes because they came from hard links. Well, that might work, depending on his workflow. Maybe I'm making some assumptions here that aren't justified. Let's assume contrary to fact that I am a committer and the master VCS for this project is git.I need to fix something in the master branch and backportit to REL8_3_STABLE and REL8_2_STABLE. I would probably do it like this: git pull git checkout master <do my thing> git commit -a git checkout REL8_3_STABLE git cherry-pick -nx master <adjust patch> git commit -a git checkout REL8_2_STABLE git cherry-pick -nx REL8_3_STABLE <further adjust patch> git commit -a git push Since I push all of my commits together, it's almost as if it's a single commit - it is at any rate no worse than CVS, which is non-atomic by nature. If I have multiple local git trees, I start like this: cd $HOME/pgsql/master git pull <do my thing> git commit -a ...and now what? If there's any point to git, it's surely that it's easy to move commits around, so I'd like to type a command here to attempt to apply that commit to $HOME/pgsql/REL8_3_STABLE. Assuming that tree is cloned from the other local tree, I think I need to do this: cd $HOME/pgsql/REL8_3_STABLE git pull git cherry-pick -nx master <adjust patch> git commit -a git push cd $HOME/pgsql/REL8_2_STABLE git pull git cherry-pick -nx REL8_3_STABLE <adjust patch further> git commit -a git push cd $HOME/pgsql/master git push # all branches upstream for real Now, maybe if Tom is happy to move around his patches the way he does now, it doesn't matter: he can just have three clones from upstream and move the patch around using diff and patch or whatever; then have a shell script call push-em-all to do just that. I would not want to do that, because the ability to move patches around easily between branches is for me one of the biggest advantages of using git in the first place, and having multiple local repositories dilutes that. But what I want doesn't matter unless it happens to be the same thing Tom wants. ...Robert
В списке pgsql-hackers по дате отправления: