Может ли SVN копировать и переопределять целевую ветвь или объединять и сохранять исходную ветвь? - PullRequest
4 голосов
/ 12 апреля 2011

Я новичок в SVN. Я обнаружил, что когда вы объединяете ветку A с веткой B, SVN перемещает весь контент в ветке A в B, а не копирует. И когда вы копируете ветвь A в ветвь C, и когда вы делаете то же самое снова, это дает вам сообщение об ошибке. Ветвь C уже существует.

Что я хочу сделать, это:

  • сначала у меня есть branch/dev - для разработки
  • затем скопируйте branch/dev в branch/test - для проверки функции
  • затем скопируйте branch/test в trunk - для этапа
  • затем добавьте тег к продукции.

Поскольку я не могу переопределить существующую ветку, когда я хочу снова скопировать branch/dev, мне нужно сначала удалить тест, что неудобно.

Есть ли способ сделать это?

Ответы [ 2 ]

5 голосов
/ 11 мая 2016

Если вы копируете из /a в /b, когда /b уже существует, вы получите /a/b.

Если вам нужен эквивалент копирования с перезаписью, вы получитенеобходимо выполнить удаление, а затем копию, например:

svn delete https://myserver/myrepo/branch/test -m "Removing test prior to copy"

svn copy https://myserver/myrepo/branch/dev -r HEAD
         https://myserver/myrepo/branch/test
         --parents -m "Copying dev branch to test"

Когда пользователи в тестовой ветви делают svn update, svn достаточно умен, чтобы загружать только измененные файлы вместо повторной загрузки всего проекта.

Недостатком этого подхода является то, что есть время, даже если это всего лишь несколько секунд, когда эта ветвь не будет существовать, а пользователи уже вэта ветка получит ошибку, если они попытаются обновить.

4 голосов
/ 12 апреля 2011

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

Надеюсь, это немного исправит ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...