Pete Freitag Pete Freitag

Ignore Files and Directories in Subversion

Published on December 14, 2007
By Pete Freitag
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?



svn subversion ignore

Ignore Files and Directories in Subversion was first published on December 14, 2007.

If you like reading about svn, subversion, or ignore then you might also like:

Discuss / Follow me on Twitter ↯

Comments

Pete, I know that there are some easy install versions of Subversion out there. Can you point me in the right direction?
by Rey Bango on 12/14/2007 at 12:43:12 PM UTC
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.
by Pete Freitag on 12/14/2007 at 2:04:43 PM UTC
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.
by Steve Goodman on 12/14/2007 at 2:12:41 PM UTC
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.
by Pete Freitag on 12/14/2007 at 2:21:41 PM UTC
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.
by Rob Wilkerson on 12/14/2007 at 5:28:20 PM UTC
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)
by Antti Mattila on 03/23/2008 at 7:32:16 AM UTC
@Antti Thanks, I fixed that typo.
by Pete Freitag on 05/14/2008 at 6:52:51 AM UTC
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?
by Gamesby on 08/04/2008 at 10:33:25 AM UTC
Those looking for a Mac client might want to check out svnX. 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 :-)
by Gamesby on 08/04/2008 at 10:40:21 AM UTC
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?
by Gamesby on 08/04/2008 at 11:21:37 AM UTC
@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.
by Rob Wilkerson on 08/04/2008 at 11:35:28 AM UTC
the message above is spam
by kind on 12/17/2008 at 10:02:03 PM UTC
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!
by Max Williams on 06/17/2009 at 2:53:05 AM UTC
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.
by starpause on 06/17/2009 at 2:18:11 PM UTC
I'm ignoring Magento's var/* Thanks for the command!
by Justin on 08/27/2009 at 3:00:23 PM UTC
Thank you very much for this information. The default SVN documentation doesn't explain this so well like you do.
by Ferdinant on 06/10/2010 at 3:39:25 AM UTC
@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?
by Grant on 11/15/2010 at 10:30:27 AM UTC
@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.
by Rob Wilkerson on 11/15/2010 at 10:36:59 AM UTC
I use svn:ignore to ignore files in the app/tmp directory of any cake app.
by Borislav Sabev on 09/19/2011 at 6:52:33 AM UTC
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!
by Chris Weekly on 07/12/2012 at 10:57:42 PM UTC
How to remove the missing files from the SVN repository
by Nasar on 05/24/2016 at 10:29:47 AM UTC