git. I’ve become very comfortable with quilt and git consistently behaved non-intuitively (for me). A couple months back someone pointed me at “git rebase -i” – the clouds parted, heavenly rays shone down upon me, and all was well once again in the Zion in my head.
With quilt you work with patches, and you really need to have them well defined in your head before you start. You can get away with some lack of planning if your various patches are restricted to distinct files. More often than not for me however, my patch series work on a single file, or maybe two or three. Merging patches in quilt is … well … just like merging patches without quilt … a flurry of filesystem commands and manual merging.
With git, you work with the source, and generate the patches from your changes. The git motto “commit often” is key to success here. I can start a project with only a rough idea of what needs doing and commit small changes along the way. When the project is done, I may have dozens of commits in my local git tree, none of which are functionally complete, and most likely won’t even compile. With “git rebase -i” I can rearrange these patches, merge them, annotate them, and generate a series suitable for submission to LKML. Ahhhhh. I git it! Finally.