Subversion: Чи можу я перевірити, змінити, а потім зробити це гілкою?


80

Я зробив замовлення з мого багажника в місцевий DIR і зробив там багато локальних змін. Зараз я не хочу повертати його назад до стовбура, але я волів би зробити гілку з цієї локальної версії. Це можливо?

Чи можу я просто скопіювати стовбур у гілку, а потім cd DIR і svn switchу гілку?

ОНОВЛЕННЯ : Дякую за відповіді, це спрацювало! Щоб підсумувати кроки:

  • cd DIR
  • svn copy . new-branch-URL
  • svn switch new-branch-URL .

(зверніть увагу на крапки)


так, ти можеш. Я використовую tortoiseSVN, і ви можете це зробити.
Нік

Я виявив занадто багато конфліктів, використовуючи svn switch, тому я вирішив перевірити свіжу копію new-branch-URLпісля svn copy.
fikr4n

Відповіді:


39

Відповідно до командного рядка довідка svn copy може копіювати з каталогу на URL-адресу сховища. Отже, ви повинні мати можливість скопіювати свою робочу копію у відділення, наприклад:

svn copy working_directory url_to_branch

52

Книга SVN ( http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.branchmerge.using.create ) не рекомендує створювати гілку з локальної робочої копії.

Хоча також можна створити гілку, використовуючи svn copyдля продублювання каталогу в робочій копії, цей спосіб не рекомендується. Насправді це може бути досить повільно! Копіювання каталогу на стороні клієнта - це операція з лінійним часом, оскільки вона насправді повинна дублювати кожен файл і підкаталог у цій робочій директорії копії на локальному диску.

Натомість спочатку створіть гілку, а потім скористайтеся svn switchкомандою, щоб ви могли вносити зміни. Якщо ваша робоча копія значно застаріла із магістраллю, додайте "@REV" до вихідної URL-адреси, де "REV" - це версія вашої робочої копії, про яку повідомляє svn info.

Однак копіювання каталогу на сервері є операцією постійного часу, і це спосіб, яким більшість людей створюють гілки.

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/my-calc-branch \
      -m "Creating a private branch of /calc/trunk."

2
Дякую за цю відповідь. Це найкраще рішення, оскільки воно зберігає історію переглядів.
evanflash

3
Чи означає це, що якщо у мене були зміни в моїй локальній робочій копії, я міг svn copy <trunk-URL> <newBranch-URL>би скопіювати стовбур в нову гілку на сервері svn, а потім використовувати svn switchв моїй робочій копії, щоб перейти на нову гілку, не втрачаючи жодних змін? Або комутатор вб'є мої незв'язані змінені файли?
Kasapo

3
@Kasapo, так це правильно. а також зверніть увагу, якщо ви застаріли з багажником; якщо так, додайте "@REV" до вихідної URL-адреси, як я вже зазначав, щоб після переходу до гілки лише ваші локальні зміни відображалися як відмінності.
Лукас

Дозвольте мені просто додати дуже корисне посилання, яке більш детально пояснює рішення Лукаса: svnbook.red-bean.com/en/1.6/svn.branchmerge.switchwc.html (подивіться на інформаційне поле внизу). Це справді найчистіше і найзручніше рішення для створення гілки з локальних модифікацій.
Spiros

9

У моєму клієнті SVN: TortoiseSVN досить:

  • клацніть правою кнопкою миші на верхній директорії, яку я хочу розгалужити
  • у "До URL" виберіть каталог гілок у вашому сховищі
  • у рамці "Створити копію у сховищі з:" виберіть "Робоча копія"

готово :)

Це подібно до копіювання локальної версії до вказаної URL-адреси сховища.


1

Так, ви можете зробити це за допомогою командного рядка SVN , а також tortoiseSVN .

Ви повинні вказати свою робочу копію SVN як src, а нову гілку - як пункт призначення

svn copy <file/path/to/working/copy> <URL/TO/REPOSITORY/BRANCH>

команди.

У TortoiseSVN просто наведіть на робочу копію, виберіть "Відділення / тег" у контекстному меню та виберіть "Робоча копія" у розділі "Створити копію у сховищі з:"

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.