Ignore Files and Directories in Subversion

December 14, 2007
misc

If you work with version control systems like subversion (svn) I'm sure you can relate to the problem of having test files show up when you try to commit changes. It is actually pretty simple to tell subversion ignore directories or specific files.

You can do this by editing the svn property called svn:ignore as follows:

svn propedit svn:ignore ./some_path

When you run that command svn will open your text editor, and this is where you can define patterns or specific files to ignore. If you place a * in the property file, it will ignore all files in the directory you specified ./some_path

*

The svn:ignore property as far as I know only supports the * as a wildcard. It doesn't support regular expressions, or anything fancy like that.

Having the wildcard is quite handy though, because you can do things like this:

*.class
test_*

Which will ignore all your files that end in .class or any file that starts with test_.

In web application development I find it handy to ignore the contents of the directory where I store uploaded images, or files.

What do you ignore?


Like this? Follow me ↯


You might also like:

28 people found this page useful, what do you think?

Comments

Pete, I know that there are some easy install versions of Subversion out there. Can you point me in the right direction?
Yeah Collab has one for windows that is easy to setup: http://downloads.open.collab.net/collabnet-subversion.html it bundles apache 2... A good client for windows is: tortoisesvn.net I haven't found a good client for mac, but I usually just use the command line client.
Of course, you could simply not add test files to the repository in the first place, then your future commits won't reflect those files. But your technique is little bit handier for when you have to add big directory trees. This will be useful for filtering out the FTP syncing files that dreamweaver creates in each directory.
Right, I should have been more clear, if you have added the test files you will need to remove them from the repo first. This makes it so your svn client doesn't report the files with a question mark when you run svn status, and should prevent you from adding these your test files to the repository by accident. It is also handy for the .project files Eclipse creates.
I ignore: .project .DS_Store _test (a directory I typically have in each project to use as kind of a quickie scratch pad) bin (another directory I often use to store files that will be uploaded to the system) I also ignore build.xml and build.properties. I don't commit those because the "live" files typically contain server authentication credentials. Instead, I commit build.xml.sample and build.properties.sample without any authentication information. Sure, I have to double my work if I make any structural changes, but it a small price to pay to avoid publishing my sudo-level user information to other members of my team. :-) Like you, I haven't found a good Mac client. I tried like hell to like SCPlugin, but just couldn't get it to do my bidding (kept getting authorization failures with no prompt to try again). I ended up sticking with Subclipse.
Argh, I fell into copy/paste trap when trying to add stuff to svn:ignore ("svn propedit snv:ignore ./some_path"). So unless you ment it to be a trap, please fix :) (snv -> svn)
@Antti Thanks, I fixed that typo.
Thanks for the advice in this post :-) I'm doing some .net development and VS likes to create LOTS of DLLs and PDBs. It also likes to make deployment all the more tricky be requiring that the web.config file sits in the root folder. I've followed your advice and everything now works fine on my development machine - DLLs, PDBs and web.config successfully ignored. One question: How can these ignore patterns filter through to every other working copy of this repo? On my svn client (collabnet), changes to svn-prop.tmp are local - so each developer has to apply the settings individually (which seem to provide all the ingredients for a "Perfect Storm"). It would be great if this could run server-side. Any thoughts on how to do this?
Those looking for a Mac client might want to check out svnX - http://www.versiontracker.com/dyn/moreinfo/macosx/24158. You might have to install subversion first though. If svnX grumbles, try "sudo port subversion" in terminal. I found it to be OK for a GUI svn client, but not as nice as tortoiseSvn for windows :-)
Found the answer to the question in my first post "How can these ignore patterns filter through to every other working copy of this repo?" Here goes: 1. Create 2 files in the root of your working copy called ignore.txt and ignore.bat. 2. Copy all the ignore patterns for your as separate lines to ignore text i.e. *.dll bin/*.dll 3. Copy the following to ignore.bat: svn propset svn:ignore trunk -F ignore.txt This assumes that all the files you want to ignore are in /trunk or below. If not, replace "trunk" with where ever you want your target to be. 4. Commit changes and run ignore.bat 5. Get all your developers to update their working copies and run ignore.bat (so everyone's on the same page). Any thoughts?
@Gamesby - I keep it pretty simple, stupid. I keep a copy of my config file in Subversion and check it out to my working directory. My team is responsible for keeping their local copy updated (updates happen rarely, to say the least). The server doesn't know to explicitly ignore the files (benefit: no list of svn:ignore properties in Trac's source code browser), but clients properly understand that the repository doesn't care about them.
the message above is spam
Hi Pete, thanks for this post, i just googled to it. It's worth pointing out (i discovered from painful experience), in shouty caps, this fact: ONLY FILES WHICH ARE NOT IN THE REPOSITORY ALREADY CAN BE IGNORED! IF YOU WANT TO IGNORE SOMETHING THAT IS IN THE REPOSITORY THEN SVN DELETE IT FIRST!
Throwing my few cents in on the osx svn front end: SmartSVN Foundation edition is the most full featured, free SVN client I've found for OSX yet. There's a SmartSVN Professional edition with a few more bells and whistles but for any of the unsupported tasks you can always drop back down to the command line.
I'm ignoring Magento's var/* Thanks for the command!
Thank you very much for this information. The default SVN documentation doesn't explain this so well like you do.
@Rob Wilkerson

I like your approach. Are you creating a separate repository for your config and checking out to a working copy? Or something else?
@Grant

Wow, this is a blast from the wayback machine. I've been using Git for the last couple of years, but as I recall, I had a separate config repository whose config/ directory I checked out to my .subversion directory.
I use svn:ignore to ignore files in the app/tmp directory of any cake app.
For Mac clients (for the poor souls stuck on SVN instead of the infinitely superior GIT), I find Cornerstone to be a much nicer OS X GUI SVN client than Subclipse (which you should only use if you already like Eclipse). But my recommendation is to use Sublime Text 2 as your code editor (it is rapidly converting tons of diehard users of Emacs, Vim, TextMate, BBedit, etc) and then use the SVN package. For me, it makes the pain of SVN tolerable while I wait for our imminent upgrade to git. Happy coding!
How to remove the missing files from the SVN repository


Foundeo Inc.