Patches
Patches are a way to distribute changes to files. In the context of Drupal, it means that patches usually describe changes to code. In fact, patches describe the changes between a before and after state. That means that if you have Drupal in the before state you can arrive at the after state by simply applying the patch.
We use patches for content control even though Drupal is distributed via CVS. This is because patches provide a great deal of control and convenience; they are small, plain-text and can be sent via e-mail; they are focussed on a change and therefore easily read and judged.
This also means that a CVS account is not required to supply patches; anyone with a Drupal account can go to the issues queue to upload a patch. The tips for contributing apply to core as well as contributed modules.
Patches serve a second purpose; some modules require changes to Drupal core files. Some module authors provide modified modules, others give you patches to do it yourself. It is recommended to use already patched files provided by the module author. When these can't be used or are not available, use patches, but exercise caution.
Warning: Patching is something that should never be done on your production site unless you have performed sufficient testing and have backed up your system. While patching itself is relatively easy, understanding the implications of a patch is not. Patching your system can lead to loss of data and/or site instabilities

SVN equivalents
If diffing against your own SVN repository, the follow tcsh alias comes in quite handy. (Tip I learned from Kitt Hodsden.)
alias svndiff 'svn diff --diff-cmd=`which diff` -x -u -x -p \!*'Then you can do:
svndiff -r1 path/to/changed/fileand get the unified diff with function information.
Alias on MacOS X
Here is the alias I set on MacOS X, in file
~/.profile:alias svndiff='svn diff --diff-cmd=`which diff` -x "-up"'Type
source ~/.profileto take into account this new alias in current terminal.Then you can use it that way:
svndiff path/to/changed/file