svn merge
не «перемещать весь контент». На самом деле, «слияние» и «копирование» в Subversion относятся к совершенно разным операциям. При слиянии будут приняты изменения, сделанные в ветке, и объединены в рабочую копию:
$ cd my/working/copy
$ svn merge ^/branches/myfeaturebranch .
Объединит все (не объединенные) изменения из ^/branches/myfeaturebranch
в my/working/copy
. В результате у вас останется рабочая копия, содержащая все изменения из /branches/myfeaturebranch
, которые вы пытаетесь объединить. В этот момент у вас также могут возникнуть конфликты, которые вам нужно разрешить до совершения. (Обратите внимание, что последний акт слияния - это просто фиксация нескольких изменений.)
Копирование, с другой стороны, похоже на cp -r SRC DST
, где SRC
и DST
могут быть либо локальными путями файловой системы, либо URL-адресами хранилища. При копировании из репо в репозиторий Subversion будет копировать (не объединять) все изменения с SRC
на DST
. Например:
$ svn copy ^/trunk ^/tags/1.0.0
Это скопирует (или «пометит») текущий транк в ^/tags/1.0.0
. Если место назначения уже существует, Subversion откажется перезаписать его.
Итак, вы хотите сделать что-то вроде
$ svn copy ^/trunk ^/branches/dev # create dev branch from trunk
$ svn co ^/branches/dev # checkout dev branch
$ cd dev
$ .... hack away ....
$ svn commit .... # commit your development changes
$ svn copy ^/branches/dev/ ^/branches/test # create testing branch
$ svn switch ^/branches/test # switch to testing branch
$ .... perform tests ....
$ svn commit .... # commit your changes in the testing branch
$ svn switch ^/trunk # switch back to trunk
$ svn merge ^/branches/test . # merge testing changes into working copy for trunk
$ .... resolve any conflicts ....
$ svn commit .... # commit merge
$ svn copy ^/trunk ^/tags/1.0.0 # final production tag
Надеюсь, это немного исправит ситуацию.