====== The following steps/example indicate how to make SVN ignore files that does not have to be version controlled ======
===== Do the basics of repository creation and usage =====
Feel free to skip this section if you want to try this out in your production repository :-) \\
\\
Move to temp directory - this is where we will do our POC
root@ub1:~# cd /tmp
Create a directory and few subs under which we can show this example
root@ub1:/tmp# mkdir svntest
root@ub1:/tmp# cd svntest
root@ub1:/tmp/svntest# mkdir -p a/a/a
root@ub1:/tmp/svntest# cd a/a/a
Create repository in a directory far away
root@ub1:/tmp/svntest/a/a/a# svnadmin create rep01
root@ub1:/tmp/svntest/a/a/a# ls
rep01
root@ub1:/tmp/svntest/a/a/a# cd /tmp/svntest
Create a directory for working directory
root@ub1:/tmp/svntest# mkdir wd
root@ub1:/tmp/svntest# cd wd
Check out files into the working dir
root@ub1:/tmp/svntest/wd# svn checkout file:///tmp/svntest/a/a/a/rep01
Checked out revision 0.
Show current SVN status (as empty) in the new working dir of new repository
root@ub1:/tmp/svntest/wd# cd rep01
root@ub1:/tmp/svntest/wd/rep01# svn status
Create a data dir a1
root@ub1:/tmp/svntest/wd/rep01# mkdir a1
Add to VCS
root@ub1:/tmp/svntest/wd/rep01# svn add * --force
A a1
Commit it.
root@ub1:/tmp/svntest/wd/rep01# svn commit -m "test"
Adding a1
Committed revision 1.
Display data dir
root@ub1:/tmp/svntest/wd/rep01# ls
a1
===== Now, let's create some files we like to ignore =====
Create another directory
root@ub1:/tmp/svntest/wd/rep01# mkdir a2
Try to make SVN ignore this and its contents
root@ub1:/tmp/svntest/wd/rep01# svn propset svn:ignore '*' a2/
svn: warning: 'a2' is not under version control
No such luck!
SVN shows this as non-versioned file.
root@ub1:/tmp/svntest/wd/rep01# svn status
? a2
Ok. Add this to VCS. In the example below we have not used 'dash dash non-recursive' option since we don't have any files underneath this directory. However if we are ignoring a directory which already has contents then we will have to ensure we only check-in the directory. Otherwise the point to this will be lost! It is now apparent that we cannot ignore the directory itself, but just the contents inside of it. That is not so bad since the directory gets checked in only once and will never bother us again.
root@ub1:/tmp/svntest/wd/rep01# svn add a2
A a2
Now let's try to ignore
root@ub1:/tmp/svntest/wd/rep01# svn propset svn:ignore '*' a2/
property 'svn:ignore' set on 'a2'
It worked! Let's commit. (optional now and can be done later)
root@ub1:/tmp/svntest/wd/rep01# svn commit -m "test1"
Adding a2
Committed revision 2.
Now let's create a file underneath a2 dir
root@ub1:/tmp/svntest/wd/rep01# touch a2/f1.txt
Check if it exists
root@ub1:/tmp/svntest/wd/rep01# ls -l a2
total 0
-rw-r--r-- 1 root root 0 2009-08-07 13:31 f1.txt
Let's check status
root@ub1:/tmp/svntest/wd/rep01# svn status
Wow! It worked this time! No output. Let's make sure with find command
root@ub1:/tmp/svntest/wd/rep01# find a2|grep -v ".svn"
a2
a2/f1.txt
Remember that the directory is actually IN version control. It's files will be ignore by the svn status command
This did not work with my windows command line version of SVN. Tortoise SVN __did__ work to ignore files through GUI.
Also, if you already have files present in the directory you will need to move them out. Here is an easy way to do this
mv cache /tmp/
svn update
rsync -r /tmp/cache cache
svn status
touch cache/test.txt
svn status
rm cache/test.txt
svn status
Last of all if you need to list all the properties that you have set, here is the command for it
svn proplist --recursive
And of course one more very last item is to be able to undo the propset. The command for that goes
svn propdel svn:ignore a2/