How to have TortoiseSVN always freeze svn:external

2019-03-15 03:37发布

问题:

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.