views:

234

answers:

3

Using Subversion, in my working copy I make a minor modification (update a version number). I would then like to tag my working copy. Would this tag still be a cheap copy with the modification, or would SVN duplicate the files? I would hate to see my repository grow enormously in size because I'm trying to save a version number change.

The reason I ask about creating a tag that contains a modification rather than committing then tagging involves my build server. The build server creates a CCNetLabel which I use to update the version numbers of my projects (AssemblyInfo.cs). When the build is successful it creates a tag. When I use ForceBuild the tag is based on the working copy which would contain the modified version number. I want the tag to contain the appropriate version number.

note: It's debatable if I'm creating a branch or a tag, however SVN does not make a distinction between the two.

+1  A: 

Creating a tag or a branch in subversion is very cheap. The files will not be copied. All that happens is that a new revision will be created, the content of which basically just contain a pointer to where the tag was copied from. This will be the same size for a tag of a project with one small file or for one with a million big ones.

When you say "tag my working copy", do you mean "tag my working branch"? You can only tag data that has already been committed into the repository somewhere, not your local uncommitted changes.

Thilo
I do mean tag my working copy. The process will be: svn update, update version number in working copy, generate tag from working copy. The goal is the save the updated version information in the tag (branch plus a modification for version number).
mcdon
+4  A: 

From the subversion description

  • Branching and tagging are cheap (constant time) operations. There is no reason for these operations to be expensive, so they aren't. Branches and tags are both implemented in terms of an underlying "copy" operation. A copy takes up a small, constant amount of space. Any copy is a tag; and if you start committing on a copy, then it's a branch as well. (This does away with CVS's "branch-point tagging", by removing the distinction that made branch-point tags necessary in the first place.)

Note! I just noticed that Subversion has been moved into the Apache project organization

epatel
+3  A: 

It depends. If your working copy is up to date (all nodes have the same revision) it is just as cheap as tagging from the repository.

For every file/directory (or actually subtree) with a different revision than its parent additional data will be added. And if you have local modifications even more data will be added.

But it is still reasonable cheap: It doesn't duplicate any files that are already in the repository.

Bert Huijben
Excellent, my concern was that it may duplicate all the files. It sounds like tagging the working copy would be barely any larger than tagging a branch on the server. Now if I could tell Cruise Control .net to always tag my working copy.... http://groups.google.com/group/ccnet-devel/browse_thread/thread/13e5cc63cb9221ae
mcdon