Distributions don't necessarily have up-to-date versions of git yet, so you need to install it yourself. Thankfully that's fairly easy.
First, download the latest snapshot from
http://www.codemonkey.org.uk/projects/git-snapshots/git/Unpack and cd into the git directory, and do
make PYTHON_PATH=/usr/bin/python2.4 prefix=/usr/local all doc sudo make prefix=/usr/local install install-doc
(I need PYTHON_PATH because git wants python 2.4 but /usr/bin/python on my machine is 2.3. You may not need it. The "prefix" arguments are also optional if you're happy with the default of "/usr". If you set the prefix, you'll also need to put a "export GIT_EXEC_PATH=/usr/local/bin/" in your .bashrc (or adjust for your favorite shell).)
If the compile fails, check to see whether it's finding all the libraries and headers it needs. The mostly likely culprits are libcurl and asciidoc, so you may need to install those before getting a successful compile.
Next, get stgit and install it
git clone http://homepage.ntlworld.com/cmarinas/stgit.git stgit cd stgit python setup.py install --prefix=/usr/local
and get the latest kernel tree:
stg clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6 cd linux-2.6
If you'd like to revert the working tree to a particular well-known version, you can do something like
git reset --hard v2.6.15
Next, set up stgit and create your first patch:
stg init stg new my-first-patch
Modify whatever files you'd like, then
stg refresh
or, if you also want to look at the resulting patch, and perhaps modify the description while you're there,
stg refresh -es
You can create more patches that apply on top of the first patch with stg new and stg refresh. Repeat this process, and the result will be a series of patches that apply one on top of the other. You can revisit an earlier patch at any time using
stg goto name_of_earlier_patch
and then reapply all your patches with
stg push -a
If a modification to an earlier patch creates conflicts that prevents a later patch from applying, then "stg push" will stop at the problematic patch and ask you to fix up the conflicts before continuing.
At any time you can see the list of currently applied patches with
stg applied
When it comes time to update to a new upstream, you can
stg pullwhich will pop off all your patches, fetch the latest upstream kernel, then attempt to push all your patches back on again, stopping to let you sort out any conflicts.
The rest of stgit is mostly pretty easy to figure out on your own. You can get help about any stgit command with
stg commandname -hand get the list of stgit commands with
stg -h