Як створити філію?


Відповіді:


349

Розгалуження в Subversion полегшується дуже легким та ефективним засобом копіювання.

Розгалуження та тегування фактично однакові. Просто скопіюйте цілу папку в сховище десь в іншому сховищі за допомогою svn copyкоманди.

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

Загальні стилі повинні мати купу папок у верхній частині сховища під назвою tags, branches, trunkі т.д. - що дозволяє копіювати всі ваші trunk(або суб-набори) в tagsі / або branchesпапку. Якщо у вас є кілька проектів, ви можете скопіювати таку структуру під кожен проект:

Це може зайняти деякий час, щоб звикнути до концепції - але це працює - просто переконайтеся, що ви (та ваша команда) чіткі щодо умов, які ви збираєтесь використовувати. Це також гарна ідея мати правильну конвенцію іменування - те, що говорить вам, чому було зроблено гілку / тег і чи все-таки підходить - розглянути способи архівації гілок, які застаріли.


211
"svn copy" має ту перевагу, що вона збереже історію, що передує розгалуженню. Вручну копіювати в інший каталог не буде.
WhyNotHugo

5
Також зауважте, що зазвичай погано зазначати теги чи гілки підкаталогів "магістраль". Це ускладнює відстеження того, який підрозділ був розгалужений, і більшість інструментів будуть заплутані цими гілками (наприклад, перемикання гілок означатиме зміну структури каталогів WC, що буде заплутати IDE та збирати інструменти). Просто завжди гілка "стовбур".
sleske

1
@Will фактично svn cpвикористовує дешеві копії, він не копіює фактичні файли під час розгалуження. Дивіться svnbook.red-bean.com/en/1.1/ch04s02.html
Walty Yeung

607

Створіть нову гілку за допомогою svn copyкоманди наступним чином:

$ svn copy svn+ssh://host.example.com/repos/project/trunk \
           svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
      -m "Creating a branch of project"

24
Наступне використання svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(якщо ви хочете переключити поточну касу на нову гілку) або svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(якщо ви хочете мати нову гілку в окремому каталозі), щоб розпочати роботу над новоствореною гілкою.
Якуб Нарубський

3
Примітка: в деяких випадках вам потрібно буде використовувати--parentsопцію зsvn copy!
Якуб Нарбський

1
чомусь я використав цей cmd, і він не працював, але коли я змінив svn + ssh на просто https, він спрацював. Я зробив щось не так? яке значення svn + ssh? Дякую!
Aviel Gross

вам потрібно створити спочатку новий каталог у своїй філії -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "зробити каталог гілок, щоб утримувати всі гілки"
Silvio Troia

Якщо я пропущу -mваріант, він говорить так svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist. З -mним сказано svn: E205009: Local, non-commit operations do not take a log message or revision properties. (Я замінив адреси, але вони існують, за винятком ofc, нового каталогу гілок і всього шляху + URL, який SVN чомусь об'єднався в помилку) .
Привіт-Ангел

33

Якщо репо доступна через https, ви можете скористатися цією командою для гілки ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"

26
svn cp /trunk/ /branch/NEW_Branch

Якщо у вас є деякі локальні зміни в магістралі, використовуйте їх Rsyncдля синхронізації змін

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch

2
Немає вимоги використовувати rsyncтаким чином. svn cpтакож буде скопійовано всі локальні зміни.
Кевін Панько

@KevinPanko Не копіює невідомі зміни.
Параг Бафна

4
Це, підтверджено svn, версія 1.8.5
Кевін Панько

Мені це цікаво. Це здається найпростішим варіантом, і AFAI пам’ятаю, це те, що я робив, коли працював зі SVN 3 роки тому. Але яка різниця між цим та тими, що працюють безпосередньо з URL-адресами сервера?
олігофрен

@KevinPanko Чи знаєте ви, чи він також копіює новостворені файли?
Джон Гамільтон

16

Припустимо, ви хочете створити гілку з імені стовбура (як "TEST"), а потім скористайтеся:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST


13

Найкраща порада для нових користувачів SVN; це може допомогти трохи швидко отримати правильні URL-адреси.

Запустіть, svn infoщоб відобразити корисну інформацію про поточну гілку реєстрації.

URL-адреса повинна (якщо ви запускаєте svn в кореневій папці) давати вам URL-адресу, з якої потрібно скопіювати.

Також для переходу до новоствореної гілки використовуйте svn switchкоманду:

svn switch http://my.repo.url/myrepo/branches/newBranchName

3
Ви також можете використовувати ^ замість кореня сховища
підказки

11

Якщо ви навіть плануєте об'єднати свою філію, я настійно пропоную переглянути це:

Svnmerge.py

Я чую, що Subversion 1.5 створює більше відстеження об'єднань, я не маю цього досвіду. Мій проект на 1.4.x, а svnmerge.py - це рятування життя!


6
  • Створіть нову папку поза вашим поточним проектом. Ви можете дати йому будь-яке ім’я. (Приклад: у вас є замовлення на проект під назвою "Настроювання". У нього є багато проектів, як-от "Project1", "Project2" .... І ви хочете створити гілку "Project1". Тому спочатку відкрийте " Налаштування ", клацніть правою кнопкою миші та створіть нову папку та дайте їй ім'я" Project1Branch ").
  • Клацніть правою кнопкою миші на "Myproject1" .... TortoiseSVN -> Відділення / Тег.
  • Виберіть робочу копію.
  • Відкрийте браузер .... Справа від паралелі на "До URL".
  • Виберіть налаштування ..... клацніть правою кнопкою миші та додайте папку. і перегляньте створену вами папку. Ось це "Project1Branch". Тепер натисніть кнопку ОК, щоб додати.
  • Оформити замовлення на цей новий банк.
  • Знову переходьте до свого проекту, яку галузь ви хочете створити. Клацніть правою кнопкою миші TorotoiseSVN -> гілка / тег. Потім виберіть робочу копію. І ви можете вказати URL як назву своєї філії. наприклад {ваша IP-адреса / svn / AAAA / налаштування / Project1Branch}. І ви можете встановити ім'я в URL, щоб воно створило папку лише з цим ім'ям. Як {Ваша IP-адреса / svn / AAAA / Настроювання / Project1Branch / MyProject1Branch}.
  • Натисніть кнопку ОК. Тепер ви можете бачити журнали у ... ваша робоча копія буде зберігатися у вашій філії.
  • Тепер ви можете взяти перевірку ... і нехай вам сподобається робота. :)

-1

Нижче наведено етапи створення гілки з стовбура за допомогою TortoiseSVN у машині Windows. Для цього, очевидно, потрібно встановити клієнт TortoiseSVN.

  1. Клацніть правою кнопкою миші оновлений багажник з локальної машини Windows
  2. Виберіть TortoiseSVN
  3. Клацніть гілку / тег
  4. Виберіть шлях до сховища SVN. Зауважте, що цільова URL-адреса оновлюється відповідно до вказаного шляху та гілки
  5. Не створюйте папку всередині гілок у браузері репозиторію
  6. Додати шлях гілок. Наприклад, готелі
  7. Додайте змістовне повідомлення журналу для довідки
  8. Натисніть Ок, це створить нову папку в локальній системі
  9. Оформіть відділення, створене в новій папці
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.