Ignore Files and Directories in Subversion
December 14, 2007
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
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:
Which will ignore all your files that end in
.class or any file that starts with
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?
Trackback Address: 662/14C254675AEE287A52BE1D38A8624D46
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.
.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.
This will be useful for filtering out the FTP syncing files that dream weaver creates in each directory. http://www.webtelefonkonyv.hu
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.
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).
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.
Isn't Versions supposed to be a kick-ass SVN client for Mac?
I haven't used it (Windows guy here, don't shoot me) but it looks great. Tortoise is perfect for me on Win, but if I was on a Mac, I'd check out Versions.
the message above is spam
I like your approach, and have used it in other projects:
svn propset svn:ignore . -F ignore.txt
This time however, after I have set the propset and commited, when I run svn status I get this message:
That is, it says my target folder is modified. Committing . does not work =)
What did I do wrong this time? Any suggestions?
Rather than ignoring your whole build.xml, it's better to factor out the credentials into e.g. auth.properties and then ignore that. You can still keep a auth.properties.example versioned to clarify the format expected.
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.
Thanks so much to all, and especially Max William's comment about files already in the repository: he helped me avoid pulling the rest of my hair out!
I've enjoyed and would recommend using Cornerstone of the mac
I'm ignoring Magento's var/* Thanks for the command!
you can't add a property to a folder that's not under version control so this doesn't work $ svn propedit svn:ignore folderName
to ignore a folder you do
$ svn propedit svn:ignore . add folder name in text editor window commit
What do I ignore? This article! Ha! Just kidding.
The best easy-install svn server is called VisualSVN (IIRC) - it's also a Winblows gui admin tool that makes administering svn so easy a drooler could handle it. (And faster to admin too, of course, otherwise what's the point?)
Thank you very much for this information. The default SVN documentation doesn't explain this so well like you do.
Versions (www.versionsapp.com) is indeed a very good svn client for OS X, though quite pricey imo
Not sure why 'kind' (comment #14) is claiming its spam — it's a real client, it's excellent, and it's an answer to Pete Frietag's comment #2.
svnX is another GUI client for OS X that's free and very usable (ugly, but it works well enough for most things)
and of course some IDEs/editors have built-in svn support, like XCode and TextMate (and i think TextWrangler, a free alternative to TextMate, also has inbuilt svn support)
I ignore the compiled tamplates (templates_c) directory from the smarty template engine ;-)
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.
I use svn:ignore to ignore files in the app/tmp directory of any cake app.
I am going to try it but does it not support ** to include subdirrectories?
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!