In many situations, there will exist files under the package directories which it would be undesirable to stow into the target directory. For example, files related version control such as .gitignore, CVS, *,v (RCS files) should typically not have symlinks from the target tree pointing to them. Also there may be files or directories relating to the build of the package which are not needed at run-time.
In these cases, it can be rather cumbersome to specify a --ignore parameter for each file or directory to be ignored. This could be worked around by ensuring the existence of ~/.stowrc containing multiple --ignore lines, or if a different set of files/directories should be ignored depending on which stow package is involved, a .stowrc file for each stow package, but this would require the user to ensure that they were in the correct directory before invoking stow, which would be tedious and error-prone. Furthermore, since Stow shifts parameters from .stowrc onto ARGV at run-time, it could clutter up the process table with excessively long parameter lists, or even worse, exceed the operating system's limit for process arguments.
Therefore in addition to --ignore parameters, Stow provides a way to specify lists of files and directories to ignore.