SVN филиал вопрос - PullRequest
       11

SVN филиал вопрос

4 голосов
/ 02 июня 2010

При создании ветки, каковы последствия выбора следующего?

Создать копию в хранилище из:

  • HEAD ревизия в хранилище
  • Конкретная ревизия хранилища
  • Рабочая копия

Ответы [ 4 ]

4 голосов
/ 02 июня 2010

Короче говоря:

  • создание из ревизии HEAD создает ветку, начинающуюся с "сейчас", где "сейчас" - это последняя версия, зафиксированная в репозитории
  • создание из определенной ревизии - это создание ветви, начиная с точки в прошлом (идентифицируемой по номеру ревизии)
  • создание из рабочей копии похоже на создание ветки, начиная с некоторой точки в будущем (ваша рабочая копия еще не принята)

В зависимости от цели создания ветки вы обычно выбираете один из первых двух вариантов. Третий вариант, вероятно, используется реже.

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

1 голос
/ 02 июня 2010

«Создание ветки» в SVN на самом деле просто делает копию некоторого подмножества вашего хранилища. На самом деле, глава SVN Book о ветвлении говорит так же .

Если ваша структура каталогов выглядит следующим образом ...

  • проект
    • багажник
    • 1012 * ветви *
    • метка

и ваш URL для транка: http://example.com/repos/project/trunk, вы бы:

  1. сделать новую ветку с именем beta из HEAD примерно так:

    svn copy http://example.com/repos/project/trunk http://example.com/repos/project/branches/beta
    

    Это немедленно создаст новую ветвь в хранилище и не повлияет на вашу локальную копию.

  2. сделать новую ветку с именем ancient из более старой версии n примерно так:

    svn copy -r n http://example.com/repos/project/trunk http://example.com/repos/project/branches/ancient
    

    Это точно так же, как 1 , но использует конкретную ревизию.

  3. сделать ветку с именем alpha из вашей локальной копии, предполагая, что ваш текущий каталог trunk:

    cd ../
    svn cp trunk branches/alpha
    

    Это сделает копию, которую вы запросили, но делает это локально. Согласно книге SVN, это не рекомендуется, потому что это занимает намного больше времени, чем создание копии на сервере хранилища (где операция копирования по существу бесплатна).

    При вводе svn help copy:

    также указывается это предостережение.

    ВНИМАНИЕ: для совместимости с предыдущими версиями Subversion, копии, выполненные с использованием двух рабочих путей (WC -> WC), не будут связаться с хранилищем. Как таковые, они не могут по умолчанию распространять информацию отслеживания слияния из источника копии до места назначения.

По моему опыту, способ 1 обычно используется. 2 используется в некоторых редких случаях, включающих сложные патчи для более ранних веток, а 3 никогда не бывает полезным (и, согласно документации, медленным и, возможно, опасным) Поэтому придерживайтесь 1 , если только у вас нет веских причин использовать один из двух других.

1 голос
/ 02 июня 2010

HEAD приведет к тому, что ветвь будет копией последней принятой версии репозитория.

Конкретная ревизия приведет к тому, что ветвь будет копией в определенный момент времени хранилища.

Рабочая копия создает ветку на основе последней редакции вашей рабочей копии, а затем фиксирует в ней все ваши изменения "в процессе".

EDIT: Пример выбора рабочей копии.

Вы обновляете свою рабочую копию последней версией ствола, чтобы начать вносить незначительные изменения.

Через несколько часов вы понимаете, что задание оказалось больше, чем вы ожидали, и вам следовало создать филиал.

Создание ветки из Рабочей копии на этом этапе эффективно создает ветвь, как если бы вы делали это в начале.

1 голос
/ 02 июня 2010

Версия HEAD в репозитории SVN принимает ревизию с наибольшим номером, таким, который был загружен последним.

Конкретная ревизия хранилища Вы можете выбрать ревизию, которую хотите получить.

Рабочая копия Редакция, как сейчас, в вашей локальной рабочей области (не введена).

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