* Git training wheels for the pimple faced maintainer
@ 2006-10-19 21:17 Pierre Ossman
2006-10-19 22:25 ` Andrew Morton
2006-10-19 23:44 ` Linus Torvalds
0 siblings, 2 replies; 23+ messages in thread
From: Pierre Ossman @ 2006-10-19 21:17 UTC (permalink / raw)
To: Andrew Morton, Linus Torvalds, LKML
Hi guys,
In an effort to change my work flow into a manner that is more suitable
for upstream merging and publishing my trees, I though I could ask for
some input from the more experienced.
My intended work flow is to work on stuff on temporary topic branches,
and cherry-pick or diff|patch them into other trees when they are mature
enough.
Stuff that need a bit more testing will be put in a public "for-andrew"
branch. From what I gather, Andrew does a pull and a diff of these kinds
of branches before putting together a -mm set. So this should be
sufficient for your needs? Do you also prefer getting "[GIT PULL]"
requests, or do you do the pull periodically anyway?
Patches that are considered stable, either directly or by virtue of
being in -mm for a while, will be moved into a "for-linus" tree and a
"[GIT PULL]" sent to herr Torvalds.
Now, the patch in "for-linus" will be a duplicate of one or several
commits in "for-andrew". Will I get any problems from git once I do a
new pull from Linus' tree into "for-andrew"?
Another concern is all the merges. As I have modifications in my tree,
every merge should generate at least one commit and one tree object. Is
this kind of noise in the git history something that needs concern?
Looking forward to your kind words and ruthless flames :)
Rgds
--
-- Pierre Ossman
Linux kernel, MMC maintainer http://www.kernel.org
PulseAudio, core developer http://pulseaudio.org
rdesktop, core developer http://www.rdesktop.org
^ permalink raw reply [flat|nested] 23+ messages in thread* Re: Git training wheels for the pimple faced maintainer 2006-10-19 21:17 Git training wheels for the pimple faced maintainer Pierre Ossman @ 2006-10-19 22:25 ` Andrew Morton 2006-10-20 6:26 ` Pierre Ossman 2006-10-19 23:44 ` Linus Torvalds 1 sibling, 1 reply; 23+ messages in thread From: Andrew Morton @ 2006-10-19 22:25 UTC (permalink / raw) To: Pierre Ossman; +Cc: Linus Torvalds, LKML On Thu, 19 Oct 2006 23:17:27 +0200 Pierre Ossman <drzeus-list@drzeus.cx> wrote: > Hi guys, > > In an effort to change my work flow into a manner that is more suitable > for upstream merging and publishing my trees, I though I could ask for > some input from the more experienced. > > > My intended work flow is to work on stuff on temporary topic branches, > and cherry-pick or diff|patch them into other trees when they are mature > enough. > > Stuff that need a bit more testing will be put in a public "for-andrew" > branch. From what I gather, Andrew does a pull and a diff of these kinds > of branches before putting together a -mm set. So this should be > sufficient for your needs? Do you also prefer getting "[GIT PULL]" > requests, or do you do the pull periodically anyway? Just send me the url&branch-name for a tree which you want included in -mm. I typically pull all the trees once per day. I usually won't even look at the contents of what I pulled from you unless it breaks. IOW, -mm is like a tree to which 70-odd people have commit permissions, except it's 70 separate trees and I independently jam them all into one tree daily. > Patches that are considered stable, either directly or by virtue of > being in -mm for a while, will be moved into a "for-linus" tree and a > "[GIT PULL]" sent to herr Torvalds. yup. > Now, the patch in "for-linus" will be a duplicate of one or several > commits in "for-andrew". Will I get any problems from git once I do a > new pull from Linus' tree into "for-andrew"? git will sort that out. > Another concern is all the merges. As I have modifications in my tree, > every merge should generate at least one commit and one tree object. Is > this kind of noise in the git history something that needs concern? I'll leave that question to a gittier responder. But yes, you'll get shouted at if Linus's final commit contains irrelevant commit and merge stuff. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-19 22:25 ` Andrew Morton @ 2006-10-20 6:26 ` Pierre Ossman 2006-10-20 6:35 ` Kyle Moffett 2006-10-20 6:37 ` Andrew Morton 0 siblings, 2 replies; 23+ messages in thread From: Pierre Ossman @ 2006-10-20 6:26 UTC (permalink / raw) To: Andrew Morton; +Cc: Linus Torvalds, LKML Andrew Morton wrote: > Just send me the url&branch-name for a tree which you want included in -mm. > I typically pull all the trees once per day. I usually won't even look at > the contents of what I pulled from you unless it breaks. > > IOW, -mm is like a tree to which 70-odd people have commit permissions, > except it's 70 separate trees and I independently jam them all into one > tree daily. > So, in other words, you have no issues with a lot of merges in the branch you're pulling from? Do you do a fresh pull each time or do you update an existing copy? If you do the latter, then I assume it is critical that my "for-andrew" branch has a continous history? (Which it won't naturally have as the changes will be replaced by identical changes coming from Linus' tree) Rgds -- -- Pierre Ossman Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 6:26 ` Pierre Ossman @ 2006-10-20 6:35 ` Kyle Moffett 2006-10-20 6:37 ` Andrew Morton 1 sibling, 0 replies; 23+ messages in thread From: Kyle Moffett @ 2006-10-20 6:35 UTC (permalink / raw) To: Pierre Ossman; +Cc: Andrew Morton, Linus Torvalds, LKML On Oct 20, 2006, at 02:26:49, Pierre Ossman wrote: > Andrew Morton wrote: >> Just send me the url&branch-name for a tree which you want >> included in -mm. >> I typically pull all the trees once per day. I usually won't even >> look at >> the contents of what I pulled from you unless it breaks. >> >> IOW, -mm is like a tree to which 70-odd people have commit >> permissions, >> except it's 70 separate trees and I independently jam them all >> into one >> tree daily. >> > > So, in other words, you have no issues with a lot of merges in the > branch you're pulling from? Do you do a fresh pull each time or do > you update an existing copy? If you do the latter, then I assume it > is critical that my "for-andrew" branch has a continous history? > (Which it won't naturally have as the changes will be replaced by > identical changes coming from Linus' tree) I seem to remember Andrew saying something like (paraphrased) "In the event that your tree doesn't have a continuous history for whatever reason, I'll just pull a fresh copy and work from there". Given that he maintains -mm as a quilt patchset and only uses GIT for incoming pulls, I would guess that either way is probably OK, although the continuous history makes merging and fixing rejects mildly nicer. Cheers, Kyle Moffett ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 6:26 ` Pierre Ossman 2006-10-20 6:35 ` Kyle Moffett @ 2006-10-20 6:37 ` Andrew Morton 2006-10-25 21:50 ` Pierre Ossman 1 sibling, 1 reply; 23+ messages in thread From: Andrew Morton @ 2006-10-20 6:37 UTC (permalink / raw) To: Pierre Ossman; +Cc: Linus Torvalds, LKML On Fri, 20 Oct 2006 08:26:49 +0200 Pierre Ossman <drzeus-list@drzeus.cx> wrote: > Andrew Morton wrote: > > Just send me the url&branch-name for a tree which you want included in -mm. > > I typically pull all the trees once per day. I usually won't even look at > > the contents of what I pulled from you unless it breaks. > > > > IOW, -mm is like a tree to which 70-odd people have commit permissions, > > except it's 70 separate trees and I independently jam them all into one > > tree daily. > > > > So, in other words, you have no issues with a lot of merges in the > branch you're pulling from? Do you do a fresh pull each time or do you > update an existing copy? If you do the latter, then I assume it is > critical that my "for-andrew" branch has a continous history? (Which it > won't naturally have as the changes will be replaced by identical > changes coming from Linus' tree) > I don't care what the history is. I fetch the whole thing then generate (you - linus) as a single unified diff then whack it into the patch pile. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 6:37 ` Andrew Morton @ 2006-10-25 21:50 ` Pierre Ossman 2006-10-25 22:06 ` Andrew Morton 0 siblings, 1 reply; 23+ messages in thread From: Pierre Ossman @ 2006-10-25 21:50 UTC (permalink / raw) To: Andrew Morton; +Cc: Linus Torvalds, LKML Andrew Morton wrote: > I don't care what the history is. I fetch the whole thing then generate > (you - linus) as a single unified diff then whack it into the patch pile. > How do you handle when I'm a bit after Linus (which will be the case most of the time)? Will me doing pulls left and right distrupt this? Rgds -- -- Pierre Ossman Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-25 21:50 ` Pierre Ossman @ 2006-10-25 22:06 ` Andrew Morton 0 siblings, 0 replies; 23+ messages in thread From: Andrew Morton @ 2006-10-25 22:06 UTC (permalink / raw) To: Pierre Ossman; +Cc: torvalds, linux-kernel > On Wed, 25 Oct 2006 23:50:11 +0200 Pierre Ossman <drzeus-list@drzeus.cx> wrote: > Andrew Morton wrote: > > I don't care what the history is. I fetch the whole thing then generate > > (you - linus) as a single unified diff then whack it into the patch pile. > > > > How do you handle when I'm a bit after Linus (which will be the case > most of the time)? Will me doing pulls left and right distrupt this? > Nope, that's fine. git gives me a diff which is "things which are in Pierre's tree but which aren't in Linus's". Just go ahead and do whatever it is you want to do and don't bother about -mm. If something goes badly wrong (it probably won't) then we can take a look at it. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-19 21:17 Git training wheels for the pimple faced maintainer Pierre Ossman 2006-10-19 22:25 ` Andrew Morton @ 2006-10-19 23:44 ` Linus Torvalds 2006-10-20 1:07 ` Mark Fasheh ` (3 more replies) 1 sibling, 4 replies; 23+ messages in thread From: Linus Torvalds @ 2006-10-19 23:44 UTC (permalink / raw) To: Pierre Ossman; +Cc: Andrew Morton, LKML On Thu, 19 Oct 2006, Pierre Ossman wrote: > > Stuff that need a bit more testing will be put in a public "for-andrew" > branch. From what I gather, Andrew does a pull and a diff of these kinds > of branches before putting together a -mm set. So this should be > sufficient for your needs? Do you also prefer getting "[GIT PULL]" > requests, or do you do the pull periodically anyway? > > Patches that are considered stable, either directly or by virtue of > being in -mm for a while, will be moved into a "for-linus" tree and a > "[GIT PULL]" sent to herr Torvalds. That all sounds fine. Please just check the format for the "[GIT PULL]" message: Andrew pulls peoples trees on his own and largely automatically, so he doesn't much care _what_ is in the tree, but I care deeply. So I want the diffstat and shortlog listings, and preferably a few sentences at the top of the email describing what's going on and why things are happening. I think people have seen the messages that other people send out (eg at least Greg KH tends to Cc: those messages to linux-kernel, so others can see what's going on too - although not all other maintainers do that). Basically, I want to know that the thing I pull makes sense for the stage I'm pulling in (ie if it's after -rc1, think about trying to explain why the fixes are all important bug-fixes for example), and what it affects. The diffstat is part of that, but please include any other explanations that seem meaningful. > Now, the patch in "for-linus" will be a duplicate of one or several > commits in "for-andrew". Will I get any problems from git once I do a > new pull from Linus' tree into "for-andrew"? No, git will take care of it, unless, of course, your extra patches conflict with the ones you sent me. > Another concern is all the merges. As I have modifications in my tree, > every merge should generate at least one commit and one tree object. Is > this kind of noise in the git history something that needs concern? Yes and no. An occasional merge by you is fine, and if the merge is about _you_ merging your own branches into one branch for me or Andrew to pull, then the merge actually adds valid information. HOWEVER. Please don't just pull from my tree just to keep your development tree "up-to-date". Your development tree is YOUR development tree, it should be about the stuff _you_ did - not about merging stuff that I merged from others. See? So there's simply no point in merging from me, unless you know that there are clashes due to other development, and you actually want to fix them up. You will just cause unnecessary criss-cross merges if you pull from my tree after you've started development, and the history gets really really messy. There's several ways to handle this: - just base your work on a certain release, and ignore all the other changes. Then, when you're ready, just ask me to pull your changes. git will just merge it up to my current version, and everything will be fine. (Of course, once I _have_ merged your changes, if you pull at that point, you'll just fast-forward, and there will be no unnecessary back-and-forth merging) - If you actually want your development tree to "track" my tree, I'd suggest you have your "for-linus" branch that you put the work you want to track into, and then a plain "linus" branch which tracks _my_ tree. Then you can just fetch my tree (to keep your "linus" branch up-to-date), and if you want your development branch to track those changes, you can just do a "git rebase linus" in your "for-linus" branch. - If you actually notice that the stuff in my tree conflicts with the stuff you develop, _then_ you obviously want to merge (you can try to "rebase" things too and fix it up durign the rebase, but merging is often easier, and at this point the merge is no longer "unnecessary noise", it's actually a real action of you doing a real merge to handle the conflict. And hey, if there is occasionally an unnecessary merge, nobody really cares. So don't be _too_ worried about it. But a clean history makes things simpler to track, so I'm asking people to not generate noise that simply doesn't help. Other git maintainers may have other hints about how they work. Anybody? Linus ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-19 23:44 ` Linus Torvalds @ 2006-10-20 1:07 ` Mark Fasheh 2006-10-20 6:45 ` Pierre Ossman 2006-10-20 4:28 ` Kyle Moffett ` (2 subsequent siblings) 3 siblings, 1 reply; 23+ messages in thread From: Mark Fasheh @ 2006-10-20 1:07 UTC (permalink / raw) To: Linus Torvalds; +Cc: Pierre Ossman, Andrew Morton, LKML On Thu, Oct 19, 2006 at 04:44:41PM -0700, Linus Torvalds wrote: > I think people have seen the messages that other people send out (eg at > least Greg KH tends to Cc: those messages to linux-kernel, so others can > see what's going on too - although not all other maintainers do that). I noticed also that people started sending out "What's in XX.git" type messages at the beginning of a merge window to describe what might shortly get sent upstream. > Other git maintainers may have other hints about how they work. Anybody? I think I have a slightly different workflow than what Pierre describes. I find that it works well for me and it keeps things very organized in ocfs2.git. It's also probably a little more work than other methods for managing a git tree that people employ. Hopefully a description of my process will be useful to someone. Basically I have two trees, ocfs2.git which is the main ocfs2 repository and my own personal linux-2.6.git which I actually hack in. All my hacking happens on topic branches based off of master in my personal tree. I keep master pristine so that it's always a direct copy of what Linus has in his tree. If somebody sends me ocfs2 patches, I'll make a topic branch for the patches in my personal tree and import them, typically via git-applymbox. Pull requests (which I typically get from Joel for configfs changes) go directly to ocfs2.git (described below). The point of this is that I hack elsewhere and keep ocfs2.git for merging stuff that's ready for people to see. In ocfs2.git, I will also make topic branches and pull from my linux-2.6.git (for my work, or patches e-mailed to me), or directly from somebody elses git tree. I make an ALL branch, based off of master which gets a merge of everything ocfs2 related that I want to go in -mm (which so far has been anything I eventually want to go upstream to Linus). Once I'm ready to send an upstream pull request, I'll update the master branch of ocfs2.git. I then make a for-linus branch based off of it, and git-cherry-pick each individual patch into that branch and send my request. I do the cherry pick because I like that it allows me to do one last review of each patch, and it helps avoid lots of merge records in my pull. This also makes it easy for me to tailor which patches I want to go upstream in a given pull - sometimes I hold things back if I feel they need more testing, or if they're features that need to wait for the next merge window. Once Linus pulls, I'll re-make the ALL branch for Andrew by re-pulling all the patchsets which weren't a part of that pull request. Btw, I cannot over state how important and useful it is to have patches go to -mm first. Hope this helps, --Mark -- Mark Fasheh Senior Software Developer, Oracle mark.fasheh@oracle.com ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 1:07 ` Mark Fasheh @ 2006-10-20 6:45 ` Pierre Ossman 2006-10-20 21:08 ` Mark Fasheh 0 siblings, 1 reply; 23+ messages in thread From: Pierre Ossman @ 2006-10-20 6:45 UTC (permalink / raw) To: Mark Fasheh, Andrew Morton; +Cc: Linus Torvalds, LKML Mark Fasheh wrote: > On Thu, Oct 19, 2006 at 04:44:41PM -0700, Linus Torvalds wrote: > >> I think people have seen the messages that other people send out (eg at >> least Greg KH tends to Cc: those messages to linux-kernel, so others can >> see what's going on too - although not all other maintainers do that). >> > I noticed also that people started sending out "What's in XX.git" type > messages at the beginning of a merge window to describe what might shortly > get sent upstream. > > Yes, I've found those to be quite nice. I'll try to remember to send my own. > >> Other git maintainers may have other hints about how they work. Anybody? >> > I think I have a slightly different workflow than what Pierre describes. I > find that it works well for me and it keeps things very organized in > ocfs2.git. It's also probably a little more work than other methods for > managing a git tree that people employ. Hopefully a description of my > process will be useful to someone. > > Basically I have two trees, ocfs2.git which is the main ocfs2 repository and > my own personal linux-2.6.git which I actually hack in. > Hmm.. What is the gain of having two tree instead of just more branches? > Once I'm ready to send an upstream pull request, I'll update the master > branch of ocfs2.git. I then make a for-linus branch based off of it, and > git-cherry-pick each individual patch into that branch and send my request. > This should be equivalent of just keeping the "for-linus" branch around as it will just fast-forward along with Linus' tree when it doesn't contain any local changes. Or am I missing something? > Once Linus pulls, I'll re-make the ALL branch for Andrew by re-pulling all > the patchsets which weren't a part of that pull request. > In other words, you destroy all the old history of your ALL branch and create a new one? So you couldn't continuously pull from that branch? > Btw, I cannot over state how important and useful it is to have patches go > to -mm first. > My intention was always to send him everything but the most trivial patches. On questions related to that though. Previously, I've always sent plain patches to Andrew. After they have simmered a bit in -mm, he usually pushes them on to Linus, even though they do not qualify as being just bug fixes. As I will now be the one moving stuff from "from-andrew" to "for-linus", will the decision of what to move now fall on me? I would probably be more inclined to wait for the next merge window than Andrew is. Thanks -- -- Pierre Ossman Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 6:45 ` Pierre Ossman @ 2006-10-20 21:08 ` Mark Fasheh 0 siblings, 0 replies; 23+ messages in thread From: Mark Fasheh @ 2006-10-20 21:08 UTC (permalink / raw) To: Pierre Ossman; +Cc: Andrew Morton, Linus Torvalds, LKML On Fri, Oct 20, 2006 at 08:45:36AM +0200, Pierre Ossman wrote: > Hmm.. What is the gain of having two tree instead of just more branches? That way I have my own private playground where I can mess around with patches, prototype new ideas, etc. It also serves as my local repository of patches I got from other folks. I treat ocfs2.git as a 'public' repository, so I don't want to pollute it with junk branches, etc. > > Once I'm ready to send an upstream pull request, I'll update the master > > branch of ocfs2.git. I then make a for-linus branch based off of it, and > > git-cherry-pick each individual patch into that branch and send my request. > > > > This should be equivalent of just keeping the "for-linus" branch around > as it will just fast-forward along with Linus' tree when it doesn't > contain any local changes. Or am I missing something? Yeah. I just remove it after the merge and re-create later, but I could just fast-forward it if I wanted to. I guess it's personal preference - it doesn't really cost me much to re-create the for-linus branch. > In other words, you destroy all the old history of your ALL branch and > create a new one? So you couldn't continuously pull from that branch? Yep. ALL is essentially a throwaway branch. Keep in mind that the topic branches don't get thrown out until they've been merged upstream. Typically people aren't pulling continuously from ALL. Most patches are against Linus' tree - I take it as part of my "job" to handle merging stuff into ALL. > On questions related to that though. Previously, I've always sent plain > patches to Andrew. After they have simmered a bit in -mm, he usually > pushes them on to Linus, even though they do not qualify as being just > bug fixes. As I will now be the one moving stuff from "from-andrew" to > "for-linus", will the decision of what to move now fall on me? I would > probably be more inclined to wait for the next merge window than Andrew is. Yes, generally you now have the responsibility of deciding what patches in your git tree are appropriate to be pushed upstream at any given time :) There are rules that people should follow of course, which Linus outlined earlier in this thread. Good Luck! --Mark -- Mark Fasheh Senior Software Developer, Oracle mark.fasheh@oracle.com ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-19 23:44 ` Linus Torvalds 2006-10-20 1:07 ` Mark Fasheh @ 2006-10-20 4:28 ` Kyle Moffett 2006-10-20 6:34 ` Pierre Ossman 2006-10-21 16:47 ` Roland Dreier 3 siblings, 0 replies; 23+ messages in thread From: Kyle Moffett @ 2006-10-20 4:28 UTC (permalink / raw) To: Linus Torvalds; +Cc: Pierre Ossman, Andrew Morton, LKML On Oct 19, 2006, at 19:44:41, Linus Torvalds wrote: > - If you actually want your development tree to "track" my tree, > I'd suggest you have your "for-linus" branch that you put the work > you want to track into, and then a plain "linus" branch which > tracks _my_ tree. Then you can just fetch my tree (to keep your > "linus" branch up-to-date), and if you want your development branch > to track those changes, you can just do a "git rebase linus" in > your "for-linus" branch. I'm no official maintainer, but I have several random local GIT trees I use for local development and patches which don't make a lot of sense outside my personal systems. Because of this it's important for me to be able to migrate my changes over to newer versions easily, but I don't care all that much about maintaining old history, I just want my separate patches to work on latest Linus. It also matters a lot to me to be able to wipe out a devel tree with a quick rm and create it from scratch. As a result, I have an "upstream" tree with various "linus", "libata- dev", etc upstream branches that I pull from for various reasons. I then have a "linux-template" tree which has no objects of its own but references the "upstream" tree's object directory and "pulls" from some branch in the upstream tree. To create a new devel tree I just copy the "upsteram" tree which is the size of a single checkout, and start patching. To update all my patchsets to latest linus: ### This gets the upstream tree to the latest state $ cd ~/git/linux/upstream $ cg-fetch linus $ cg-fetch libata-dev $ cg-fetch $OTHER_UPSTREAM_SRC ## Optionally repack the single copy of the upstream objects for better speed $ git-repack -a -d -l -f ### Now fast-forward the patches in $MY_TREE to be based on the latest version of the random upstream tree $ cd ~/git/linux/$MY_TREE $ cg-fetch upstream $ git-rebase upstream ### Now I resolve rebase-conflicts When I want to export a GIT tree for somebody else to look at I just pull into the HTTP-accessible GIT directories from my various development trees, optionally merging if necessary. This isn't "The Best Solution(TM)" for everyone, but it works really well for me and has the advantage of only storing one easily-repacked copy of the upstream sources; the rest of my dev trees have only the overhead of my local changesets and a single copy of the kernel sources. In the event I have to wipe out a dev tree it's a very fast "rm -rf $OLD_TREE", and creating one is also a fast "cp -a linux- template $NEW_TREE" Cheers, Kyle Moffett ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-19 23:44 ` Linus Torvalds 2006-10-20 1:07 ` Mark Fasheh 2006-10-20 4:28 ` Kyle Moffett @ 2006-10-20 6:34 ` Pierre Ossman 2006-10-20 7:30 ` Kyle Moffett 2006-10-20 15:26 ` Linus Torvalds 2006-10-21 16:47 ` Roland Dreier 3 siblings, 2 replies; 23+ messages in thread From: Pierre Ossman @ 2006-10-20 6:34 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, LKML Linus Torvalds wrote: > That all sounds fine. Please just check the format for the "[GIT PULL]" > message: Andrew pulls peoples trees on his own and largely automatically, > so he doesn't much care _what_ is in the tree, but I care deeply. So I > want the diffstat and shortlog listings, and preferably a few sentences at > the top of the email describing what's going on and why things are > happening. > I'm still learning the more fancy parts of git, but I think that would be: git diff master..for-linus | diffstat git log master..for-list | git shortlog right? > I think people have seen the messages that other people send out (eg at > least Greg KH tends to Cc: those messages to linux-kernel, so others can > see what's going on too - although not all other maintainers do that). > > Basically, I want to know that the thing I pull makes sense for the stage > I'm pulling in (ie if it's after -rc1, think about trying to explain why > the fixes are all important bug-fixes for example), and what it affects. > The diffstat is part of that, but please include any other explanations > that seem meaningful. > > That was the basic idea. I've been looking at these kinds of messages on LKML, trying to deduce how people do their work. > So there's simply no point in merging from me, unless you know that there > are clashes due to other development, and you actually want to fix them > up. You will just cause unnecessary criss-cross merges if you pull from my > tree after you've started development, and the history gets really really > messy. > And in order to test for conflicts, I assume I should have a "test tree" that I merge all my local stuff in, together with your current HEAD? > There's several ways to handle this: > > - just base your work on a certain release, and ignore all the other > changes. Then, when you're ready, just ask me to pull your changes. git > will just merge it up to my current version, and everything will be > fine. > > (Of course, once I _have_ merged your changes, if you pull at that > point, you'll just fast-forward, and there will be no unnecessary > back-and-forth merging) > > - If you actually want your development tree to "track" my tree, I'd > suggest you have your "for-linus" branch that you put the work you want > to track into, and then a plain "linus" branch which tracks _my_ tree. > Then you can just fetch my tree (to keep your "linus" branch > up-to-date), and if you want your development branch to track those > changes, you can just do a "git rebase linus" in your "for-linus" > branch. > If I've understood git correctly, a rebase is a big no-no once I've published those changes as it reverts some history. Right? > - If you actually notice that the stuff in my tree conflicts with the > stuff you develop, _then_ you obviously want to merge (you can try to > "rebase" things too and fix it up durign the rebase, but merging is > often easier, and at this point the merge is no longer "unnecessary > noise", it's actually a real action of you doing a real merge to handle > the conflict. > > And hey, if there is occasionally an unnecessary merge, nobody really > cares. So don't be _too_ worried about it. But a clean history makes > things simpler to track, so I'm asking people to not generate noise that > simply doesn't help. > A load of my mind. ;) Big thanks for all the pointers. I have my account at kernel.org, so it won't be long until my first [GIT PULL]. Be gentle. Rgds -- -- Pierre Ossman Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 6:34 ` Pierre Ossman @ 2006-10-20 7:30 ` Kyle Moffett 2006-10-20 15:26 ` Linus Torvalds 1 sibling, 0 replies; 23+ messages in thread From: Kyle Moffett @ 2006-10-20 7:30 UTC (permalink / raw) To: Pierre Ossman; +Cc: Linus Torvalds, Andrew Morton, LKML On Oct 20, 2006, at 02:34:54, Pierre Ossman wrote: > Linus Torvalds wrote: >> That all sounds fine. Please just check the format for the "[GIT >> PULL]" message: Andrew pulls peoples trees on his own and largely >> automatically, so he doesn't much care _what_ is in the tree, but >> I care deeply. So I want the diffstat and shortlog listings, and >> preferably a few sentences at the top of the email describing >> what's going on and why things are happening. > > I'm still learning the more fancy parts of git, but I think that > would be: > > git diff master..for-linus | diffstat > git log master..for-list | git shortlog Not quite. diffstat doesn't understand renames and such, you want to use something more like this: git diff -M --stat --summary master..for-linus git log --pretty=short master..for-linus | git shortlog As an example, if you rename foo/bar/baz.c to foo/bar/quux.c and change a few lines, you'll get something like this: foo/bar/{baz.c => quux.c} | 8 +-- It similarly makes renames between directories look nice. >> So there's simply no point in merging from me, unless you know >> that there are clashes due to other development, and you actually >> want to fix them up. You will just cause unnecessary criss-cross >> merges if you pull from my tree after you've started development, >> and the history gets really really messy. > > And in order to test for conflicts, I assume I should have a "test > tree" that I merge all my local stuff in, together with your > current HEAD? Yes >> If you actually want your development tree to "track" my tree, I'd >> suggest you have your "for-linus" branch that you put the work you >> want to track into, and then a plain "linus" branch which tracks >> _my_ tree. Then you can just fetch my tree (to keep your "linus" >> branch up-to-date), and if you want your development branch to >> track those changes, you can just do a "git rebase linus" in your >> "for-linus" branch. > > If I've understood git correctly, a rebase is a big no-no once I've > published those changes as it reverts some history. Right? Well, sorta. If it's a pseudo-published development and you actually _don't_ _care_ what the old history was (because it was broken or incorrect or one of the patches got corrupted during import) then go ahead and wipe it out. On the other hand if you have random people pulling from your published tree then you can't safely git-rebase or cg-admin-rewrite-hist or similar. Luckily GIT will just complain about a discontinuous history as opposed to losing data. Cheers, Kyle Moffett ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 6:34 ` Pierre Ossman 2006-10-20 7:30 ` Kyle Moffett @ 2006-10-20 15:26 ` Linus Torvalds 2006-10-20 15:35 ` Linus Torvalds 2006-10-21 9:44 ` Pierre Ossman 1 sibling, 2 replies; 23+ messages in thread From: Linus Torvalds @ 2006-10-20 15:26 UTC (permalink / raw) To: Pierre Ossman; +Cc: Andrew Morton, LKML On Fri, 20 Oct 2006, Pierre Ossman wrote: > > I'm still learning the more fancy parts of git, but I think that would be: > > git diff master..for-linus | diffstat Use "git diff -M --stat master..for-linus" instead. The "-M" enables rename detection, and the "--stat" does the diffstat for you (and better than plain diffstat, since it knows about renames, copies and deletes). HOWEVER! The above obviously only really works correctly if "master" is a strict subset of "for-linus". > git log master..for-linus | git shortlog Yes. > And in order to test for conflicts, I assume I should have a "test tree" > that I merge all my local stuff in, together with your current HEAD? Exactly. It can be either just a random temporary branch (it's cheap), or it can just be your "work tree" that you can keep as messy as you want, and then the "for-linus" branch is the cleaned-up version. And quite frankly, most of the time you don't even really need one. It depends on what you work on, but a _lot_ of the kernel is so independent of anything else, that you know that the only thing that will ever really conflict is trivial things, and hey, one of the things I do is to fix up those conflicts. In fact, quite often the _right_ thing to do for most developers is to just entirely ignore what everybody else is doing, because if there are trivial conflicts, I'll take care of them, and if there are more serious conflicts, I'll just let you know myself - and you may not even be in a position to _know_ about it, because the conflicts could come from somebody elses git tree that I just happened to pull before. So don't worry too much about it. As already mentioned, the _worst_ thing you can do is probably to continually pull from my tree to "stay on the edge". The way we keep the kernel maintainable is not by having everybody try to keep up with everybody else, but by trying to keep things so independent that people don't _need_ to keep up with everybody else. A lot of people seem to just synchronize up at major releases, and then rebase their work (which they may even have kept in quilt or something else: you don't even have to use "git" for this) on that, and ask me to merge the result. So don't worry too much. Also - different people work in different ways, and it's _ok_. > If I've understood git correctly, a rebase is a big no-no once I've > published those changes as it reverts some history. Right? That is mostly correct. It's a big no-no if somebody has already pulled from you, and you want them to pull again. Because at that point, you're essentially asking them to pull two totally different versions of the same thing - git will do the right thing (since all the duplicates will usually merge perfectly), but it will look like two different histories, and you'll see every commit twice. That's just ugly. On the other hand, things like the -mm tree are "throw-away" anyway: Andrew re-creates the tree every time he pulls. So you can rebase the branch you send to Andrew as much as you want. So it's not _entirely_ about whether something is "published" or not, it's literally more about how something is actively _used_. But yes - in general, the rule of thumb should be: rebase as much as you want in your own _private_ sandbox to make things look nice, but once you've exposed it to anybody else, it's set in stone. > Big thanks for all the pointers. I have my account at kernel.org, so it > won't be long until my first [GIT PULL]. Be gentle. Now, I may not be "gentle", because if there is something wrong with the end result I'll tell you so and I'm not exactly known for always being excessively polite ;) But don't worry, it can be fixed up. At worst, you'll just get an email back saying "I'm not going to pull this one, because you've been a complete clutz, and did something really stupid wrt XYZ", and I'll ask you to fix it up. Or I might say "I'll pull it this time, but I don't want to see XYZ again in the future". Or I might not say anythign at all, and you'll just notice that I've pulled from you. Linus ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 15:26 ` Linus Torvalds @ 2006-10-20 15:35 ` Linus Torvalds 2006-10-21 9:44 ` Pierre Ossman 1 sibling, 0 replies; 23+ messages in thread From: Linus Torvalds @ 2006-10-20 15:35 UTC (permalink / raw) To: Pierre Ossman; +Cc: Andrew Morton, LKML On Fri, 20 Oct 2006, Linus Torvalds wrote: > > Use "git diff -M --stat master..for-linus" instead. Actually, use "git diff -M --stat --summary master..for-linus". The "--summary" thing generates an additional summary at the end of the diffstat that lists deleted/created/moved/copied files, which is nice to see. There's a difference between a drivers/char/myserial.c | 50 ++++++++ 1 file changed, 50 insertions(+), 0 deletions(-) and drivers/char/myserial.c | 50 ++++++++ 1 file changed, 50 insertions(+), 0 deletions(-) create mode 100644 drivers/char/myserial.c because the latter tells that the new lines are actually in a new file, while the previous says that you just added lines to an old one. (Without "--summary", you can't tell the difference between these two cases) And the "-M" flag obviously means the difference between: drivers/pci/hotplug/pci_hotplug.h | 236 ---------------------- include/linux/pci_hotplug.h | 236 ++++++++++++++++++++++ 2 files changed, 236 insertions(+), 236 deletions(-) delete mode 100644 drivers/pci/hotplug/pci_hotplug.h create mode 100644 include/linux/pci_hotplug.h and .../pci/hotplug => include/linux}/pci_hotplug.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) rename drivers/pci/hotplug/pci_hotplug.h => include/linux/pci_hotplug.h (99%) where the latter version clearly tells you a whole lot more about the patch than the non-renaming one. The reason rename detection isn't on by default is that non-git tools don't understand the rename diffs. But if anybody sends me patches, please feel free to use "git diff -M" to make them smaller and more readable in the face of renames. Linus ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-20 15:26 ` Linus Torvalds 2006-10-20 15:35 ` Linus Torvalds @ 2006-10-21 9:44 ` Pierre Ossman 2006-10-21 16:10 ` Linus Torvalds 1 sibling, 1 reply; 23+ messages in thread From: Pierre Ossman @ 2006-10-21 9:44 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, LKML Linus Torvalds wrote: > On Fri, 20 Oct 2006, Pierre Ossman wrote: > >> I'm still learning the more fancy parts of git, but I think that would be: >> >> git diff master..for-linus | diffstat >> > > Use "git diff -M --stat master..for-linus" instead. > > The "-M" enables rename detection, and the "--stat" does the diffstat for > you (and better than plain diffstat, since it knows about renames, copies > and deletes). > > HOWEVER! The above obviously only really works correctly if "master" is a > strict subset of "for-linus". > > Ah, that's a bit of a gotcha. Any nice tricks to keep track of where you where in sync with upstream last? Create a dummy branch/tag perhaps? Rgds -- -- Pierre Ossman Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-21 9:44 ` Pierre Ossman @ 2006-10-21 16:10 ` Linus Torvalds 2006-10-21 18:05 ` Pierre Ossman 0 siblings, 1 reply; 23+ messages in thread From: Linus Torvalds @ 2006-10-21 16:10 UTC (permalink / raw) To: Pierre Ossman; +Cc: Andrew Morton, LKML On Sat, 21 Oct 2006, Pierre Ossman wrote: > > > > HOWEVER! The above obviously only really works correctly if "master" is a > > strict subset of "for-linus". > > Ah, that's a bit of a gotcha. Any nice tricks to keep track of where you > where in sync with upstream last? Create a dummy branch/tag perhaps? You don't need to. Git keeps track of the fork-point, and you can always get it with git merge-base a b where "a" and "b" are the two branches. HOWEVER. If you have _merged_ since (ie your branch contains merges _from_ the branch that you are tracking), this will give you the last merge-point (since that's the last common base), and as such a "diff" from that point will _ignore_ your changes from before the merge. See? But holding a tag to the "original fork point" is equally useless in that case, since if you have merged from my tree since that tag, and you do a "git diff tag..for-linus", then the diff will contain all the new stuff that came from _me_ through your merge as well. See? In other words: in both cases you really really shouldn't merge from me after you started developing. And the reason in both cases is really fundamnetlly the same: because merging from me obviously brings in commits _from_me_, so any single diff thus obviously turns pointless: it will _not_ talk about all your new work. Anyway, notice the "single diff" caveat above. Git obviously does actually keep track of individual commits, so the individual commits that are unique to your repository are _still_ unique to your repository even after you've merged with me - since I haven't merged with you. So you _can_ get the information, but now you have to do something fundamentally different.. So if you've done merges with me since you started development, you cannot now just say "what's the difference between <this> point and <that> point in the development tree", because clearly there is no _single_ line of development that shows just _your_ changes. But that doesn't mean that your development isn't separatable, and you can do one of two things: (a) work on a "individual commit" level: git log -p linus..for-linus will show each commit that is in your "for-linus" branch but is _not_ in your "linus" tracker branch. This does the right thing even in the presense of merges: it will show the merge commit you did (since that individual commit is _yours_), but it will not show the commits merged (since those came from _my_ line of development) So now a git log -p linux..for-linus | diffstat will give something that _approximates_ the diffstat I will see when merging. I say _approximates_, because it only really gives the right answer if all the commits are entirely independent, and you never have one commit that changes a line one way, and then a subsequent commit that changes the same lines another way. If you have commits that are inter-dependent, the diffstat above will show the "sum" of the diffs, which is not what I will see when I actually merge. I will see just the end result, which is more like the "union" of the diffs. And the two are the same only for independent diffs, of course. So the above is simple, and gives _almost_ the right answer. The other alternative is slightly smarter, and more involved, and gives the exact right answer: (b) create a temporary new merge, and see what the difference of the merge is, as seen by me (eg as seen from "linus"). So this is basically: git checkout -b test-branch for-linus git pull . linus git diff -M --stat --summary linus.. will create a new branch ("checkout -b") based on your current "for-linus" state, and within that branch, do a merge of the "linus" branch (or you could have done it the other way around and made the merge as if you were me: check out the state of "linus" and then pull the "for-linus" branch instead). And then, the final step is to just diff the result of the merge against the "linus" branch. This obviously gives the same diffstat as the one _I_ should see when I merge, because you basically "pre-tested" my merge for me. See? git does give you the tools, but if you merge from me and don't have a branch that is a nice clear superset of what you started off with, but have mixed in changes from _my_ tree since you started developing, you end up having to do some extra work to separate out all the new changes. So that's why I suggest not doing a lot of criss-crossing merges. It generates an uglier history that is much harder to follow visually in "gitk", but it also generates some extra work for you. Not a lot, but considering that there are seldom any real upsides, this hopefully explains why I suggest against it. And again, as a final note: none of this is "set in stone". These are all _suggestions_. Notice the "seldom any real upsides". I say "seldom" on purpose, because quite frankly, sometimes it's just easier for you to merge (especially if you know there are likely to be clashes), so that you can fix up any issues that the merge brings. Anyway, I hope this clarified the issue. I don't think we've actually had a lot of problems with these things in practice. None of this is really "hard", and a lot of it is just getting used to the model. Once you are comfortable with how git works (and using "gitk" to show history tends to be a very visual way to see what is going on in the presense of merges), and get used to working with me, you'll do all of this without even thinking about it. It really just _sounds_ more complicated than it really is. Linus ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-21 16:10 ` Linus Torvalds @ 2006-10-21 18:05 ` Pierre Ossman 2006-10-21 19:07 ` Linus Torvalds 0 siblings, 1 reply; 23+ messages in thread From: Pierre Ossman @ 2006-10-21 18:05 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, LKML Linus Torvalds wrote: > On Sat, 21 Oct 2006, Pierre Ossman wrote: > >>> HOWEVER! The above obviously only really works correctly if "master" is a >>> strict subset of "for-linus". >>> >> Ah, that's a bit of a gotcha. Any nice tricks to keep track of where you >> where in sync with upstream last? Create a dummy branch/tag perhaps? >> > > You don't need to. Git keeps track of the fork-point, and you can always > get it with > > git merge-base a b > > where "a" and "b" are the two branches. > > HOWEVER. If you have _merged_ since (ie your branch contains merges _from_ > the branch that you are tracking), this will give you the last > merge-point (since that's the last common base), and as such a "diff" from > that point will _ignore_ your changes from before the merge. See? > This sounds sufficent. My idea was to freeze my outgoing branches (and possible topic branches that are "done"). I would like to keep my development branches up to date though. In other words, I have a branch "linus" which keeps your current tree. >From this I'll fork off branches for things going upstream. Until these have been merged, I won't do any more syncs with "linus". But my development branch will keep moving with the "linus" branch. If I read your response above and the man page for git-merge-base, it will do the right thing even if "linus" now is further in the future than the point I forked it. > > (a) work on a "individual commit" level: > > git log -p linus..for-linus > > will show each commit that is in your "for-linus" branch but is _not_ > in your "linus" tracker branch. This does the right thing even in the > presense of merges: it will show the merge commit you did (since that > individual commit is _yours_), but it will not show the commits > merged (since those came from _my_ line of development) > > Ah, so "git log" will not show the commits that have popped up on "linus" after "for-linus" branched off? Neat. :) One concern I had was how to find stuff to cherry-pick when doing a stable review. > Anyway, I hope this clarified the issue. I don't think we've actually had > a lot of problems with these things in practice. None of this is really > "hard", and a lot of it is just getting used to the model. Once you are > comfortable with how git works (and using "gitk" to show history tends to > be a very visual way to see what is going on in the presense of merges), > and get used to working with me, you'll do all of this without even > thinking about it. > > It really just _sounds_ more complicated than it really is. > > git has a lot of these hidden features and ways of doing less-than-obvious things, so I'm just trying to broaden my repertoire by consulting those who have been using it on a more daily basis. I am just thankful git has a reset command ;) Thanks -- -- Pierre Ossman Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-21 18:05 ` Pierre Ossman @ 2006-10-21 19:07 ` Linus Torvalds 0 siblings, 0 replies; 23+ messages in thread From: Linus Torvalds @ 2006-10-21 19:07 UTC (permalink / raw) To: Pierre Ossman; +Cc: Andrew Morton, LKML On Sat, 21 Oct 2006, Pierre Ossman wrote: > > If I read your response above and the man page for git-merge-base, it > will do the right thing even if "linus" now is further in the future > than the point I forked it. Yes. You can continue to track my state in the "linus" branch as much as you want, and "git merge-base" will show where your branch and mine diverged, so you don't need to remember it explicitly. Only if you start _mixing_ the branches (ie you merge "linus" into your branch) do you end up in the situation where there now is no longer a single-threaded line of development, so you can no longer expect to be able to just use a direct "git diff". > > (a) work on a "individual commit" level: > > > > git log -p linus..for-linus > > > > will show each commit that is in your "for-linus" branch but is _not_ > > in your "linus" tracker branch. This does the right thing even in the > > presense of merges: it will show the merge commit you did (since that > > individual commit is _yours_), but it will not show the commits > > merged (since those came from _my_ line of development) > > Ah, so "git log" will not show the commits that have popped up on > "linus" after "for-linus" branched off? Neat. :) That is what the git "a..b" syntax means for everything _but_ "diff". Doing a "git diff" really is actually the special case: to create a diff, you need two end-points. For all other git commands, "a..b" really means "all commits that are in 'b' but not in 'a'", ie it's _not_ really about two end-points, it's about a _set_ operation. You should think of "a..b" as the "set difference" operation, or "b-a". There's also a "symmetric difference", which is called "a...b" (three dots). That's the "union of the differences both ways", in other words, "a...b" is the set of commits that exist in a _or_ b, but not in both. You can do some even more complex operations, and one that I find reasonably useful at times is for example gitk --all --not HEAD which basically means: "show all commits in all branches, but subtract everything that is reachable from the current HEAD". In other words, it shows what commits exist in all the other branches that have not been merged into the current one. (The "--not HEAD" thing is mostly written as "^HEAD", but I wrote it out in long-hand here because it is perhaps a bit more readable that way.) > One concern I had was how to find stuff to cherry-pick when doing a > stable review. So looking at the above, what you can do is literally gitk --all ^linus which shows all your branches _except_ stuff that is already merged into the "linus" branch that tracks what I have merged. Git really is very clever. HOWEVER! A word of warning: especially when you start doing cherry-picking, git will consider a commit that has been cherry-picked to be totally _separate_ from the original one. So when you do things like the above, and you have commits that have "identical patches" as the ones I have already applied, they will show up as "not being in linus' branch". That's because the identity of a commit is really not the patch it describes at all: the commit is defined by the exact spot in the history, and by the exact contents of that commit (which include date, time, committer info, parents, exact tree state etc). So when you do a "cherry-pick", you are very much creating a totally new commit - it just happens to generate the same (or similar) _diff_. There are tools to help you filter out cherry-picked commits too, by literally looking at the diff and saying "oh, that same diff already exists upstream", but that's different. If you really care, you can look at what "git cherry" does (and it's not very efficient). > git has a lot of these hidden features and ways of doing > less-than-obvious things, so I'm just trying to broaden my repertoire by > consulting those who have been using it on a more daily basis. You really can do a _lot_ with git. Part of what seems to scare some people is that git really allows for a lot of power and flexibility, and you can do some very fancy stuff. At the same time, you can mostly also use it as if it were a lot dumber than it really is. There are ways to limit your usage so that you'll never even need to worry about things like multiple branches or cherry-picking or merging or anything else, and try to just see your work as a linear progression on top of a particular release version. I'll happily explain all the grotty details, but keep in mind that you don't _need_ to use the features if you don't want to. > I am just thankful git has a reset command ;) You can undo almost any mess you get yourself into (you _can_ really screw that up too, if you do a combination of "reset" and "git prune", but you have to work at it). The bigger problem may be that if you get yourself into a real mess, you need to understand how you got there: you can always get back to a previous state, sometimes you just need to know what that state _was_, and if you get confused enough, even that can be a problem. "gitk" really does tend to help clarify what happened. Linus ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-19 23:44 ` Linus Torvalds ` (2 preceding siblings ...) 2006-10-20 6:34 ` Pierre Ossman @ 2006-10-21 16:47 ` Roland Dreier 2006-10-21 18:15 ` Pierre Ossman 3 siblings, 1 reply; 23+ messages in thread From: Roland Dreier @ 2006-10-21 16:47 UTC (permalink / raw) To: Linus Torvalds; +Cc: Pierre Ossman, Andrew Morton, LKML > Other git maintainers may have other hints about how they work. Anybody? I use StGIT (http://www.procode.org/stgit/) to have sort of a hybrid git/quilt workflow. My infiniband.git tree has the following main branches (I also keep other topic branches around): for-2.6.19 for-2.6.20 for-linus for-mm master I use master to track Linus's tree. for-2.6.19 and for-2.6.20 are StGIT branches that have patches queued up for 2.6.19 and 2.6.20 (duh). The advantages of StGIT are: - I can do "stg pull" to do the equivalent of "git rebase" in a slightly cleaner way. - If I queue a patch and then someone later says "oops, that patch needs this fix," I can go back and revise the patch easily. This means I avoid cluttering the main kernel history with "change X" followed by "fix for change X" followed by "update change X" - StGIT works within git, so when it is time to send the changes to Linus, I can just do "git merge blah for-linus for-2.6.19" and then ask Linus to pull the for-linus branch. - R. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-21 16:47 ` Roland Dreier @ 2006-10-21 18:15 ` Pierre Ossman 2006-10-21 21:27 ` Roland Dreier 0 siblings, 1 reply; 23+ messages in thread From: Pierre Ossman @ 2006-10-21 18:15 UTC (permalink / raw) To: Roland Dreier; +Cc: Linus Torvalds, Andrew Morton, LKML Roland Dreier wrote: > > Other git maintainers may have other hints about how they work. Anybody? > > I use StGIT (http://www.procode.org/stgit/) to have sort of a hybrid > git/quilt workflow. My infiniband.git tree has the following main > branches (I also keep other topic branches around): > I've actually been using StGIT up until now. But I've started to feel a need for sharing my tree, and StGIT isn't really suited for that. How have you handled collaborative development on stuff that isn't ready for Linus yet? Simply sending patches back and forth? Rgds -- -- Pierre Ossman Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Git training wheels for the pimple faced maintainer 2006-10-21 18:15 ` Pierre Ossman @ 2006-10-21 21:27 ` Roland Dreier 0 siblings, 0 replies; 23+ messages in thread From: Roland Dreier @ 2006-10-21 21:27 UTC (permalink / raw) To: Pierre Ossman; +Cc: Linus Torvalds, Andrew Morton, LKML > I've actually been using StGIT up until now. But I've started to feel a > need for sharing my tree, and StGIT isn't really suited for that. > > How have you handled collaborative development on stuff that isn't ready > for Linus yet? Simply sending patches back and forth? I don't use StGIT for collaborative development. My StGIT branches are really just patch queues (as the names for-2.6.19 and for-2.6.20 imply). Usually development is just about done before things wind up in a maintainer tree, so being able to apply updates to patches already in my tree is more important than fully automated merged (as native git gives you). ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2006-10-25 22:07 UTC | newest] Thread overview: 23+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-10-19 21:17 Git training wheels for the pimple faced maintainer Pierre Ossman 2006-10-19 22:25 ` Andrew Morton 2006-10-20 6:26 ` Pierre Ossman 2006-10-20 6:35 ` Kyle Moffett 2006-10-20 6:37 ` Andrew Morton 2006-10-25 21:50 ` Pierre Ossman 2006-10-25 22:06 ` Andrew Morton 2006-10-19 23:44 ` Linus Torvalds 2006-10-20 1:07 ` Mark Fasheh 2006-10-20 6:45 ` Pierre Ossman 2006-10-20 21:08 ` Mark Fasheh 2006-10-20 4:28 ` Kyle Moffett 2006-10-20 6:34 ` Pierre Ossman 2006-10-20 7:30 ` Kyle Moffett 2006-10-20 15:26 ` Linus Torvalds 2006-10-20 15:35 ` Linus Torvalds 2006-10-21 9:44 ` Pierre Ossman 2006-10-21 16:10 ` Linus Torvalds 2006-10-21 18:05 ` Pierre Ossman 2006-10-21 19:07 ` Linus Torvalds 2006-10-21 16:47 ` Roland Dreier 2006-10-21 18:15 ` Pierre Ossman 2006-10-21 21:27 ` Roland Dreier
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox