About merges in Subversion
This page explains how FishEye manages merge operations in Subversion, and provides examples of supported and unsupported merge formats.
Subversion allows you to reapply changes made on other branches to the current working branch using the merge operation. For example, merging allows you to reintegrate a feature branch with trunk, or to reapply changes made on trunk to the current working branch. Subversion tracks this information in the dedicated
svn:mergeinfo path property. FishEye detects changes in those properties and uses those to mark parents of a changeset accordingly, effectively exposing merges between branches.
- Although the path property might be set manually by using the propset command, FishEye trusts this information blindly, which means that if you add a required property in a correct format, FishEye will resolve parents for a changeset accordingly.
- The versions of the Subversion client and server used to perform merges both need to be version 1.5 or higher, since earlier versions do not have
svn:. FishEye supports only branch and trunk path roots merges.
How FishEye shows merge information
Changeset merges are exposed in three places:
- commit graph
- changeset view
- REST and Java API
Note: Although merge information is processed, changes on different branches are not reflected in the file ancestry history.
Acceptable path property format
FishEye uses the
svn:mergeinfo property. It is set on a target path to which revisions has been merged and contains information about the revisions or revision range that has been merged, and the source of the merge. FishEye supports only base branches merge, which means that only the following format is acceptable:
(Source branch):(Range revision start)-(Range revision end)
However if none of the changesets in the range <10,15> made actual changes to
feature-branch, (or those changes are not recognised as such by FishEye due to, for example, the included/excluded paths), the merge information won't be reflected.
Merge targets and sources
FishEye supports only branch and trunk path merges, which means that proper configuration of the repository structure is crucial. If the
mergeinfo property is applied on a path that isn't identified as a branch or trunk root by SVN rules, it won't be processed. The same applies to
mergeinfo value which describes the source of a merge. If it's not a branch/trunk root, or it's excluded by include/exclude paths, it won't be processed or reflected in FishEye.
Considering the basic(built-in) rules and recommended repository structure, the following merge properties will be recognized:
Property changes on: branches/example-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk:r2-3
But the following will not be recognized:
Property changes on: trunk/directory ___________________________________________________________________ Added: svn:mergeinfo Merged /branches/example-branch/directory:r2-5
None of the operations described on this site are supported by FishEye. Cherry picking revisions may result in
mergeinfo formats similar to the following, which won't be recognized:
However, if you cherry pick revisions to create a valid revision range, it will be reflected in FishEye. For example, doing a couple of consecutive merge operations might result in a ranged
svn:mergeinfo property format. Such a situation happens on the second merge command, which will transform
svn:mergeinfo to contain the value
/example-branch:8-9. In that case, FishEye will recognize it as a valid merge in the latest commit and mark it accordingly.
$ svn merge -c 8 ^/branches/example-branch && svn commit $ svn merge -c 9 ^/branches/example-branch && svn commit