0

My project "A" is in my own svn repository. My project A needs a reference to an external project "B". But I need to modify the code of project B. I cannot commit code to project B since this is not my project. I want to checkout project B and merge code into project B.

What I have tried so far:

  • Added project B as external link into a folder named B_source. (the update command downloads the external code. This step works)
  • I copied with windows explorer the content of B_source into a folder named B_changes and applied the source code changes I needed. (works)
  • I checked out project B into a folder named B_patched. (works)
  • In TortoiseSVN right click on B_patched, click "merge", select "merge two different trees", set "From: B_source" and "To: B_changes" and "Working Copy: B_patched".
  • "Test merge" showed the message "svn/B_source path not found". I guess it's because of the external link!?

What am I doing wrong?

jimbo
  • 582
  • 1
  • 11
  • 28

1 Answers1

1

Merging is for taking two trees in the same repository and merging them to your working copy from the same repository. You would then commit that merge to the repository.

What you are trying to do, is apply custom changes to a repository, without being able to commit those changes. You cannot do this with the "merge" command.

What you're probably looking for is a vendor branch. The idea of a vendor branch is that you keep a project in your repository (call it "vendor") that you only update by copying unmodified code from the external project, and committing those updates. You create a branch of that project wherever you want (call it "patched") in a place convenient for you to pull into your build. You apply any of your custom changes to this branch. Periodically, as the external project makes updates, you will copy those updates into "vendor", commit, and then merge "vendor" to "patched" and commit those changes.

TortoiseSVN makes this easy with a context-menu entry when you right-click and drag from one unversioned folder into a folder in your repository which you maintain. You will not use svn:exterals in this case, you will simply be committing code, where most of the changes come from the customer.

Ben
  • 8,725
  • 1
  • 30
  • 48