My collaborators and I often find that we would like to be able to set different svn:ignore and svn:externals properties for our own working copies of a project. It doesn't seem like the svn functionality related to the properties requires that those properties be versioned, but we haven't yet found a way to unversion these properties.
views:
47answers:
4No, properties are specific to the file/directory they are set on. User-specific properties do not exist.
Why do you need different svn:externals? One way of dealing with that is to have your own directory in the repository containing only externals. That way you can control your own set of externals.
The conventions and layout of the repository is something that you have to agree on. Subversion does not really allow users to customize their view of the repository.
To unversion these properties, delete them from the folder or file they're attached to (then commit). If you're using the command line you can use "svn propdel" to remove them.
Properties in SVN are stored on the server, they are not working-copy constructs, so you cannot have the same property set for different users.
To get different 'views' of the same code, you might like to look into branching instead, each of you work on your own branches and regularly merge your changes into the trunk. That sounds like the workflow you're trying to achieve with different properties per user.
For a different way of looking at svn:ignore, you can set different 'global-ignores' on your clients.
Muhahahahaha!
A totally impractical solution to getting user-specific (well, actually workstation-specific) svn:externals:
First, Have each developer create a subversion repository on their own machine, and run a little svnserve instance to make it accessible.
svn://localhost/local-externals
Have each developer set their perferred svn:externals property on the root directory of said repository.
svn co svn://localhost/local-externals
svn pe svn:externals local-externals
...
svn commit local-externals
In your central repository, include an svn:externals reference to svn://localhost/local-externals
svn co svn://example.com/repo/project/trunk
svn pe svn:externals
... define an reference to svn://localhost/local-externals
svn commit trunk
Now, each developer checking out the trunk will get their externals directory from their local externals repository pulled in, which can in turn pull in the parts of the main repository they want to have included in their checkout.
You could do this, but I think I'd consider myself certifiably insane for even considering this.
Think of SVN as a file system. If you wanted to achieve your goals, what would you do in a file system? Each of you would create a copy of the original files somewhere.
You can do the same with Subversion (svn copy
). Properties set in the new subdirectories will only be valid for those subdirectories and not for the original files.
But there is a price: You now have to synchronize (merge) your changes manually (just like you would have to do when you do this in the local filesystem without subversion).
I'm not aware of any VCS which allows what you want for free.