*nix tip of the day

I keep having the following problem when dealing with svn: I frequently find myself wanting to add to my own SVN repository stuff(javascript libraries, rails plugins) retrieved from some other svn repositories. The inevitable outcome of my bold attempt is that SVN starts complaining that the new folders can’t be submitted, that they already are under code control or something.

The reason is because when copying entire FOLDERS from one svn repository to another, you also copy their associated .svn folders with svn-specific information. These .svn folders are usually hidden, but you can see them (on Unix/Linux/OSX) by running ls -la from the terminal.

So you see my problem: I want to copy files or folders into my code repository, but don’t want to involve svn into this. I want them to be added as new files/folders, regardless of where they came from.

The following command-line command has helped me avoid quite a bit of frustration today:


find . -name "*.svn" -print
find . -name "*.svn" -ok rm -rf {} \;

The first command lists recursively all svn-specific subfolders of the current one.
The second command displays them to me one after the other and patiently awaits I press ‘y’ to remove it.
Extremely useful, right?
For many more uses of the find command, check out this page – where I learned about the useful ‘ok rm’ trick.


Similar Posts:

0 thoughts on “*nix tip of the day”

  1. Yep, Cristian has the nose for these things. You can svn export your current working copy (or remote svn’s base copy) directly into the new project.

    svn export . /path/to/other/project

    No need to run odd finds.

  2. thanks for the -d correction. and, yes, you are pedantic 😀 – really now, why would I have useful files named .svn , and why wouldn’t the manual check discover them 😉 ?

  3. Call me pedantic, but you’ll want to make sure you’re removing only directories named .svn, not any file that happens to match the “*.svn” pattern. So you’ll want to do something like:

    find . -name .svn -type d -ok rm -rf {} ‘;’

    -type d matches only directories.

    😉

Leave a Reply