There are two ways with subversion, one is specific to the user and the other is actually maintained in the repository (and therefore effects everyone).
For a list of globally ignored files (exclusive to each user/machine), you need to edit the subversion config file and alter the global-ignores directive in the miscellany section. The config file is documented and the syntax is very simple. For example:
global-ignores = *.o
On a UNIX system, the config file is found at ~/.subversion/config
. On a Windows system, the config file is found at %APPDATA%\Subversion\config
or in the registry under HKCU\Software\Tigris.org\Subversion\Config
.
Once you set this up, you will never accidently add these files to your repository, nor will the files show up as ? in your svn stat
commands. If your repository already has these files, it probably won't hurt to leave them there as they are, but changes and modifications to the files will be ignored in the future.
To set this up on a per-project basis (which will effect anyone checking out the project), you would add the svn:ignore property to the project directories where files are likely to be stored. For example, to exclude a directory named build
from the top-level of your project, you would do something like this:
svn propset svn:ignore 'build' .
svn commit -m 'project ignores build directory' .
From now on, the build directory in your project will be ignored by subversion. For more on this, see the documentation at http://subversion.tigris.org/ or issue the svn help
command for more information.
EDIT: Added more based on comment... dunno how I missed that part of the original question!! Sorry :)
Unfortunately, removing the files that you now want ignored from the repository is a manual process, although, if you know exactly which files they are, you could write a little script that people having this problem could run (in the future, the svn:ignore property would keep them from ever having to repeat it, and it has the advantage of being able to be easily modified when the need arises).
To remove the files that you don't want from the repository, but keep the local files around, follow these steps:
- Create either your global-ignores entry or add the svn:ignore property to your repository and commit.
- For each file that you want to remove from the repository, issue this command:
svn rm --keep-local filename
- Once you've issued the
svn rm
command for each file, commit your working copy.
Because this may have the side-effect of deleting files from people's current working copies if they haven't updated their config files, I highly recommend using the svn:ignore property on the repository directories. That way, when people update, they won't unexpectedly have files deleted because they haven't modified their global-ignores
parameter yet.