This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
svn:release_cycle [2010/08/28 14:02] Toni Corvera |
svn:release_cycle [2011/08/01 17:15] Toni Corvera Major cleanup/overhaul |
||
---|---|---|---|
Line 8: | Line 8: | ||
* Tags are never modified | * Tags are never modified | ||
- | FIXME: Backporting still untested | + | Legend: ''[x] $'' marks directory from which to run –''wcopy'' for working copy–, for ''$'' directory doesn't matter |
- | Example: Working on branch 1.1 of ''foo'' (''[x]$'' marks directory from which to run –''wcopy'' for working copy–, for ''$'' directory doesn't matter) | + | ===== Cycle ===== |
- | [wcopy]$ svn update | + | Work on branch: |
- | [wcopy]$ svn ci -m "* Last commit before merging" | + | $ svn co url://.../branches/BRANCH_X |
- | $ svn co url://TRUNK | + | [wcopy] $ svn ci |
- | [trunk]$ svn merge --reintegrate url://BRANCHES/1-1 . # --reintegrate vital here (except if re-merging)! Note the final dot! | + | |
- | [trunk]$ svn ci -m "* Merge branch 1.1 to trunk" | + | |
- | $ svn copy url://TRUNK url://TAGS/1.1 | + | |
- | $ svn rm url://BRANCHES/1.1 | + | |
- | $ svn copy url://TAGS/1.1 url://BRANCHES/1.2 # or 1.1.1 | + | |
- | [wcopy]$ svn switch url://BRANCHES/1.2 | + | |
- | Release: | + | "Promote" branch to trunk: |
- | $ svn export url://TAGS/1.1 | + | [wcopy] $ svn ci -m "Last commit before merge" |
- | [1.1]$ # package etc. | + | [wcopy] $ svn log --verbose --stop-on-copy # Identify branching revision, e.g. 1600 |
+ | [wcopy] $ svn sw url://.../TRUNK # Working copy changes to trunk | ||
+ | [wcopy] $ svn update # Get HEAD revision, e.g. 1700 | ||
+ | [wcopy] $ svn merge -r1600:HEAD url://.../branches/BRANCH_X . | ||
+ | (Fix conflicts, if any) | ||
+ | [wcopy] $ svn ci -m "Merge from branch X to trunk, r1600:1700" # Logging the revision range will be useful for future 'svn log' | ||
- | ===== Merge from parallel branches ===== | + | Incremental merges: Subsequent merges from the same branch should skip revisions already merged (i.e. "-r 1701:HEAD") |
- | ''svn merge'' acts as a normal diff. \\ | + | "Release": |
- | ''svn merge -r R1:R2'' acts as a three-way diff. | + | $ svn copy url://.../TRUNK url://.../TAGS/RELEASE_X -m "Release X" |
+ | $ svn rm url://.../BRANCHES/BRANCH_H -m "Delete merged branch" | ||
+ | $ svn copy url://.../TRUNK url://.../BRANCHES/BRANCH_Y -m "Branch Y" | ||
+ | [wcopy] $ svn sw url://.../BRANCHES/BRANCH_Y # Switch to new branch for development | ||
+ | |||
+ | $ svn export url://.../TAGS/RELEASE_X X | ||
+ | [X] (package, etc. to actually release) | ||
+ | The tree will retain merge information (source branches and revisions), display with: | ||
+ | [wcopy] $ svn pg svn:mergeinfo | ||
- | Ref: http://svnbook.red-bean.com/en/1.0/ch04s04.html | + | ===== Unclean merge ===== |
- | $ svn log --verbose --stop-on-copy # Identify branching revision, e.g. 1600 | + | When branching and merging hasn't been handled too well, this can help: |
- | [wcopy]$ svn update # Identify HEAD, e.g. 1700 | + | |
- | [wcopy]$ svn merge -r1600:HEAD url://SOURCE_BRANCH . | + | |
- | # Fix conflicts. Only *actual* conflicts should be shown, normal changes should integrate correctly | + | |
- | [wcopy]$ svn ci -m "* Merge from branch X, r1600:1700" # Log revisions for later merges (check with 'svn log') | + | |
- | Later merges should be restricted to the non-merged revisions: | + | [trunk] $ svn merge --reintegrate url://.../BRANCHES/BRANCH_X . |
- | [wcopy]$ svn merge -r 1701:HEAD url://SOURCE_BRANCH . | + | ===== Notes ===== |
+ | |||
+ | * ''svn merge'' acts as a normal diff. | ||
+ | * ''svn merge -r R1:R2'' acts as a three-way diff. | ||
+ | * Notice the dot at the end of ''merge'' lines | ||
+ | * FIXME: Backporting still untested | ||
+ | |||
+ | Ref: http://svnbook.red-bean.com/en/1.0/ch04s04.html | ||