How to have TortoiseSVN always freeze svn:externals for tags
Is this possible with tortoiseSVN?:
Always freeze svn:externals
for tags
the scenario is our trunk will always use the 'HEAD' revision for externals, however when we create 'tags' we would like for them to have a revision set for externals to properly 'free开发者_Go百科ze' them at a specific point in time.
Update
Thanks to everyone for your feedback/info.
Since I could not find anything that would completely meet our needs (tried smartsvn
and svncopy.pl
) I made a console app that so far has passed all our test cases.
A high level overview: The app takes a repository URL then looks for all externals and adds the last commit revision for them - I do a svn info
and get the "commit revision".
The app works with both folder and single file externals.
Here is the source code and complete setup files: http://svnxf.codeplex.com/
I found this post today as I looked for a solution to the exact same problem. Eventually I found that TortoiseSVN in their latest version DOES support this desired functionality: TortoiseSVN 1.7 Release Notes.
Hopefully this will help others who find this post when researching the same issue.
The recommended best practice is to always use an explicit revision (not HEAD) in externals definitions. From the documentation:
You should seriously consider using explicit revision numbers in all of your externals definitions. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. … For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex codebase.
To directly answer your question: no, it’s not possible to automatically change the externals definitions when tagging using TortoiseSVN. It will have to be done manually when creating the tag.
You can try svncopy.pl (find it on google) It is a perl script that answer your need.
You should try SmartSVN which optionally converts HEAD-externals to fixed externals when creating tags or branches. You can find this option (External Revisions: (o) Leave as is ( ) Fix all ( ) Fix except below) at the bottom of the Add Tag/Add Branch dialogs.
I would second Michael.
Additionally to recommendation from SVN documentation:
- Usage non-fixed revisions in svn:externals makes harder to update working copy to a specified revision (e.g. during bug investigation)
- Log of directory with svn:externals will be incomplete which may provide false information about change sets between revisions
- Branching and merging may become more complicated
Generally, SVN seems to be designed mostly for code contained in a common directory. svn:externals (even by name) is added for referencing external repositories. So I would expect other problems additionally to mentioned above.
On my experience need for usage of svn:externals for non-fixed revisions frequently comes from wrong structure in repository.
May be it's not your case, I just advise to take into account these points...
Update
Thanks to everyone for your feedback/info.
Since I could not find anything that would completely meet our needs (tried smartsvn and svncopy.pl) I made a console app that so far has passed all our test cases.
A high level overview: The app takes a repository URL then looks for all externals and adds the last commit revision for them - I do a "svn info" and get the "commit revision".
The app works with both folder and single file externals.
Here is the source code and complete setup files: http://svnxf.codeplex.com/
You can specify the revision in externals:
third-party/skins -r148 http://svn.example.com/skinproj
See svnbook
I know this isn't for tortoiseSVN, but if you use eclipse with subversive, you can right click the project and select team->tag. Subversive freezes externals by default and formats the properties quite nicely.
精彩评论