ChatGPT解决这个技术问题 Extra ChatGPT

Merge trunk to branch in Subversion

I'm using Subversion 1.4.6, and I cannot upgrade to version 1.5 right now.

The situation:

The trunk has a lot of structural changes (i.e. moving files around, mostly). I have a branch that was recently merged from the trunk, but before the major changes.

What is the best way to merge the trunk to the branch?

What I had in mind:

First carefully merge the branch to the trunk, by merging only the modified files in the branch to the trunk. Copy the trunk to the branch. What is the best way to do this without losing the branch history? Should I deprecate the branch and create a new one?

Okay, it looks like I didn't given SVN enough credit. It's smart enough after all. I was just put off by the output of "D" and "A", but in the background it did a move.

The question and the answers are relevant to very old SVN client and server versions and is not relevant to SVN 1.5+ and especially SVN 1.8+

S
Stefan

Is there something that prevents you from merging all revisions on trunk since the last merge?

svn merge -rLastRevisionMergedFromTrunkToBranch:HEAD url/of/trunk path/to/branch/wc

should work just fine. At least if you want to merge all changes on trunk to your branch.


When I dried-run it, there where a lot of "D" and "A" for many files, since the files where moved in the trunk. My question is if SVN remembers the files' histories in this case.
Did you use svn rename when moving files in the trunk? If you did, the history should remain. I think you should try this on a small scale - create a new repository, a trunk with a single file, a branch with a change, do an svn rename on the trunk and check whether history exists.
How can I know which was the last revision merged from trunk to branch?
in newer versions of svn it is a stored as a file property (somewhere?, perhaps the root directory). Older version do not store this info, you have to manually search for it. i.e. search the log for the commit of the last merge. (This is a major inconvenvience. Git, Mercurial, Bazaar do not have these limitations)
A good guide available here: stereointeractive.com/blog/2009/02/17/…
c
cbuchart

Last revision merged from trunk to branch can be found by running this command inside the working copy directory:

svn log -v --stop-on-copy

That just stops the log when the branch was created; it doesn't show any merges that happened after that point.
Because, with that little caveat from @moswald, this can be quite useful to know. I don't see the problem. I don't usually have long lived branches (at most one week), so I normally only pull from trunk right before reintegration.
M
Markku

It is “old-fashioned” way to specify ranges of revisions you wish to merge. With 1.5+ you can use:

svn merge HEAD url/of/trunk path/to/branch/wc

I'm using 1.6.11 and it's making me enter a range.
Do you have to even say so much? What is wrong with 'svn merge /url/of/trunk' while in the working copy?
svn: E195002: Invalid merge source 'HEAD'; a working copy path can only be used with a repository revision (a number, a date, or head)
@Solo HEAD indeed requires you to specify a revision number, but there is no longer any need to use HEAD. As GreenAsJade mentions, "svn merge /url/of/trunk path/to/branch/wc" worked for me.
Answer should be revised to remove "HEAD"