Ignore Files and Directories in Subversion
By Pete Freitag
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?
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:
- Blocking .svn and .git Directories on Apache or IIS
- Moving a Subversion Repository to Another Server
- Using svn over ssh
Discuss / Follow me on Twitter ↯
Tweet Follow @pfreitagComments
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.
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.
.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.
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?
I found it to be OK for a GUI svn client, but not as nice as tortoiseSvn for windows :-)
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?
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.
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!
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 like your approach. Are you creating a separate repository for your config and checking out to a working copy? Or something else?
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.