100

Can I ignore a folder on svn checkout? I need to ignore DOCs folder on checkout at my build server.

edit: Ignore externals isn't an option. I have some externals that I need.

Zoe stands with Ukraine
  • 25,310
  • 18
  • 114
  • 149
Zote
  • 5,245
  • 5
  • 40
  • 43
  • Check out this: http://stackoverflow.com/questions/116074/how-to-ignore-a-directory-with-svn – hephestos Mar 02 '11 at 14:10
  • Does this answer your question? [How do I ignore a directory with SVN?](https://stackoverflow.com/questions/116074/how-do-i-ignore-a-directory-with-svn) – Gautier Dec 20 '19 at 13:59

10 Answers10

105

You can't directly ignore folders on a checkout, but you can use sparse checkouts in svn 1.5. For example:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

This will check files and directories from your project trunk into 'my_checkout', but not recurse into those directories. Eg:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Then to get the contents of 'bar' down:

$ cd bar && svn update --set-depth infinity
Jon Topper
  • 3,087
  • 1
  • 19
  • 15
  • Note: there was a bug in some 1.5 versions that prevented this with `svn: Shallowing of working copy depths is not yet supported` – gcb Jan 26 '12 at 22:07
81

Yes you can using SVN 1.6. You will need to do a checkout first then mark the folder for exclusion then delete the unwanted folder.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

From now on any updates to the working copy won't repopulate the docs folder.

See http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ and http://subversion.apache.org/docs/release-notes/1.6.html#sparse-directory-exclusion for more details.

Tom

tommy_turrell
  • 819
  • 6
  • 2
9

With versions prior to 1.5 I have found that if you checkout only the top most folder and then selectively update, from then on updates only effect what you have checked out. Ie.

svn co -N foo
cd foo
svn up -N bar
svn up

The -N flag makes the operation non-recursive. The above will not check out anything else at the foo level, eg. say there is a folder lala, the final svn up will not check out that folder, but it will update bar.

But at a later time you can svn up lala and thus, add it to the checkout.

Presumably this also works with 1.5.

mxcl
  • 25,402
  • 11
  • 95
  • 97
6

This is in TortoiseSVN client 1.7.1 (might be available in some older versions as well):

  • SVN checkout --> Select URL of repository

  • Click on "Checkout Items" (under Checkout Depth) and select only the folders required!

gammay
  • 5,461
  • 6
  • 31
  • 49
4

Yes, Subversion 1.5 has a feature called Sparse checkouts that can do exactly this sort of thing.

misterManSam
  • 23,481
  • 10
  • 68
  • 87
Greg Hewgill
  • 890,778
  • 177
  • 1,125
  • 1,260
  • 2
    From reading that, it looks like sparse checkouts only limit the depth of a checkout. They can't ignore one particular folder. – John Millikin Oct 10 '08 at 20:04
  • Sure, you might have to do a little extra legwork, like limit the depth of the parent folder with --depth immediates, then check out all the other folders except the one you would like to ignore. The point is, the tools are there if you need to use them. – Greg Hewgill Oct 11 '08 at 05:45
  • I appreciate the mention of SparseCheckouts, and it is interesting for sure, but this response does not address the original question. Sure, I can check out one file at a time, and that will result in having local copies of specific files I want, but what a pain in the ass to have to do each individually. I believe the author of this question is asking about ignoring a specific folder, not depth of x folders, and allow the computer do the work - the same work you are recommending could be accomplished manually. – barrypicker Nov 05 '12 at 17:32
  • The 1.6+ versions provide the added ability to ignore folders and more control general of what to include/exclude in a working copy (where v1.5 is very limited in this) http://svnbook.red-bean.com/en/1.7/svn.advanced.sparsedirs.html – FruitBreak Aug 24 '15 at 20:52
4

You could put the docs folder in an external repository and then use svn checkout --ignore-externals.

John Millikin
  • 191,086
  • 39
  • 207
  • 222
3

I found this question looking for a way to check out the WebKit sources while excluding the regression tests. I ended up with the following:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

Note you can change the exclusions as you see fit, but .* is recommended to skip the working directory (which is already up to date) and all of the .svn directories.

rgov
  • 2,728
  • 25
  • 36
2

I have recently resolved the same task. The idea is to get the immediate list of folder/files under the repository exclude the entries you need, then check out the remaining folders and update the immediate files if any. Here is the solution:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

Change to source working directory. Copy the commands. Paste. Change appropriate URL and exclude pattern. Run the command.

Thanks,

bv.
  • 55
  • 6
  • 1
    hey what's 6 years for developers? On your last line you have $ubrpath. Where is that set? – D-Klotz Feb 10 '16 at 15:19
  • 1
    @D-Klotz, thank you, that should be $rpath instead, which in turn is set to the repository path.
    Sorry for one year late
    – bv. Feb 13 '17 at 20:14
1

No, ignore is only for adding files.
You can use sparse checkouts (if you use svn 1.5)

Peter Parker
  • 28,010
  • 5
  • 51
  • 78
1

As a few others have mentioned, you can just use svn:externals properties and then the --ignore-externals option when you checkout. One thing to note, however, is that svn:externals does not necessarily need to refer to another repository. It can be a reference to some other folder in the same repo.

Nik Reiman
  • 37,525
  • 27
  • 102
  • 159