Thanks for the patch! I would like to fold something like this in. Two thoughts.
First, many programs (e.g., cp) have three options: -H -L -P. These distinctions seem to be useful for diff. This suggests that the new --no-dereference flag should be -P, not -h. -h has a subtly different meaning from -P, in programs like chown. Changing the patch to use -P instead of -h should be easy; we can implement -H and -L later as need be. Second, and more important, the output of --no-dereference should be something that we can feed to an (augmented) 'patch' so that it can alter a copy of the old tree, symlinks and all, so that it looks like the new tree, symlinks and all. This suggests that the output of 'diff' needs to contain the symlink contents, and needs to distinguish symlinks from regular files, so that 'patch' can reconstruct the symlinks.
