问题
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 'freeze' 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/
回答1:
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.
回答2:
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.
回答3:
You can try svncopy.pl (find it on google) It is a perl script that answer your need.
回答4:
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.
回答5:
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...
回答6:
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/
回答7:
You can specify the revision in externals:
third-party/skins -r148 http://svn.example.com/skinproj
See svnbook
回答8:
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.
来源:https://stackoverflow.com/questions/1982538/how-to-have-tortoisesvn-always-freeze-svnexternals-for-tags