patching.rst
123 lines
| 3.9 KiB
| text/x-rst
|
RstLexer
Fernando Perez
|
r2599 | ================ | ||
Making a patch | ||||
================ | ||||
You've discovered a bug or something else you want to change in ipython_ - excellent! | ||||
You've worked out a way to fix it - even better! | ||||
You want to tell us about it - best of all! | ||||
The easiest way is to make a *patch* or set of patches. Here we explain | ||||
how. Making a patch is the simplest and quickest, but if you're going | ||||
to be doing anything more than simple quick things, please consider | ||||
following the :ref:`git-development` model instead. | ||||
.. _making-patches: | ||||
Making patches | ||||
============== | ||||
Overview | ||||
-------- | ||||
:: | ||||
# tell git who you are | ||||
git config --global user.email you@yourdomain.example.com | ||||
git config --global user.name "Your Name Comes Here" | ||||
# get the repository if you don't have it | ||||
git clone git://github.com/ipython/ipython.git | ||||
# make a branch for your patching | ||||
cd ipython | ||||
git branch the-fix-im-thinking-of | ||||
git checkout the-fix-im-thinking-of | ||||
# hack, hack, hack | ||||
# Tell git about any new files you've made | ||||
git add somewhere/tests/test_my_bug.py | ||||
# commit work in progress as you go | ||||
git commit -am 'BF - added tests for Funny bug' | ||||
# hack hack, hack | ||||
git commit -am 'BF - added fix for Funny bug' | ||||
# make the patch files | ||||
git format-patch -M -C master | ||||
Then, send the generated patch files to the `ipython mailing list`_ - where we will thank you warmly. | ||||
In detail | ||||
--------- | ||||
#. Tell git_ who you are so it can label the commits you've made:: | ||||
git config --global user.email you@yourdomain.example.com | ||||
git config --global user.name "Your Name Comes Here" | ||||
#. If you don't already have one, clone a copy of the ipython_ repository:: | ||||
git clone git://github.com/ipython/ipython.git | ||||
cd ipython | ||||
#. Make a 'feature branch'. This will be where you work on your bug | ||||
fix. It's nice and safe and leaves you with access to an unmodified | ||||
copy of the code in the main branch:: | ||||
git branch the-fix-im-thinking-of | ||||
git checkout the-fix-im-thinking-of | ||||
#. Do some edits, and commit them as you go:: | ||||
# hack, hack, hack | ||||
# Tell git about any new files you've made | ||||
git add somewhere/tests/test_my_bug.py | ||||
# commit work in progress as you go | ||||
git commit -am 'BF - added tests for Funny bug' | ||||
# hack hack, hack | ||||
git commit -am 'BF - added fix for Funny bug' | ||||
Note the ``-am`` options to ``commit``. The ``m`` flag just signals | ||||
that you're going to type a message on the command line. The ``a`` | ||||
flag - you can just take on faith - or see `why the -a flag?`_. | ||||
#. When you have finished, check you have committed all your changes:: | ||||
git status | ||||
#. Finally, make your commits into patches. You want all the commits | ||||
since you branched from the ``master`` branch:: | ||||
git format-patch -M -C master | ||||
You will now have several files named for the commits:: | ||||
0001-BF-added-tests-for-Funny-bug.patch | ||||
0002-BF-added-fix-for-Funny-bug.patch | ||||
Send these files to the `ipython mailing list`_. | ||||
When you are done, to switch back to the main copy of the code, just | ||||
return to the ``master`` branch:: | ||||
git checkout master | ||||
Moving from patching to development | ||||
=================================== | ||||
If you find you have done some patches, and you have one or more feature | ||||
branches, you will probably want to switch to development mode. You can | ||||
do this with the repository you have. | ||||
Fork the ipython_ repository on github_ - :ref:`forking`. Then:: | ||||
# checkout and refresh master branch from main repo | ||||
git checkout master | ||||
git pull origin master | ||||
# rename pointer to main repository to 'upstream' | ||||
git remote rename origin upstream | ||||
# point your repo to default read / write to your fork on github | ||||
git remote add origin git@github.com:your-user-name/ipython.git | ||||
# push up any branches you've made and want to keep | ||||
git push origin the-fix-im-thinking-of | ||||
Then you can, if you want, follow the :ref:`development-workflow`. | ||||
.. include:: git_links.txt | ||||