git-svn: як створити нову гілку svn через git?


193

У мене є сховище git, яке відстежує сховище svn. Я клонував це за допомогою --stdlayout.

Я створив нове місцеве відділення через git checkout -b foobar

Тепер я хочу, щоб ця гілка …/branches/foobarопинилася у сховищі svn.

Як мені це зробити?

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


Відповіді:


280

Я знаю, що на це питання вже давно відповідали, але, прочитавши його, я можу допомогти додати приклади конкретної команди гілки gn svn і відновити її до типового робочого процесу.

Як kch відповів, використовуй git svn branch. Ось повний приклад (зверніть увагу -nна тест-ходу для тестування):

git svn branch -n  -m "Branch for authentication bug" auth_bug

Якщо це піде добре, сервер відповідає на такий варіант відповіді:

Копіювання https://scm-server.com/svn/portal/trunk на r8914 на https://scm-server.com/svn/portal/branches/auth_bug ...

І без -nкомутатора сервер, ймовірно, додає щось на кшталт:

Знайдена можлива точка відділення: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

Знайдено батьківське відділення: (refs / remote / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Слідом за батьком з do_switch

Успішно підписано батьківського r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs / remote / auth_bug)

Найкраща його частина, тепер ви можете створити локальну гілку на основі віддаленої гілки так:

git checkout -b local/auth_bug auth_bug

Що означає "перевірити та створити локальну гілку з назвою auth_bugта змусити її слідувати за віддаленою гілкою (останній параметр)auth_bug

Перевірте , що ваше місцеве відділення працює на цьому віддаленому філії з використанням dcommitз --dry-run( -n):

git svn dcommit -n

І SVN-сервер повинен відповісти новою назвою гілки:

Звертаючись на https://scm-server.com/svn/portal/branches/auth_bug ...


2
Так, git co означає, що Jesper створив псевдонім git.
Джейсон Аксельсон

3
оновлений і замінений git coз git checkoutтаким , що приклад може працювати для кого
Jesper Ронн-Jensen

5
Я вже проголосував за цю відповідь, але не знаю, скільки разів продовжую повертатися. Дякую!
Бен Доерр

35
У команді є складна частина git-svn branch- вам потрібно бути в мережі, щоб створити нову гілку таким чином. Ви можете зробити наступне в автономному режимі: 1. git checkout -b foobar2. хак-хак-хак 3. git commit -m "Done foobar". І коли в Інтернеті натиснути це зміна, роблячи 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3. git svn dcommit.
vadishev

2
Тому замініть крок 2 на git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Для тестування, щоб переконатися, що гілка тепер переходить до гілки svn. git svn dcommit --dry-run6. Нарешті фактично git svn dcommitgit branch -D foobar-new
виконайте

64

станом на git v1.6.1 git svn branch.

З git docs:

    відділення
        Створіть відділення у сховищі SVN.

        -м, --повідомлення
            Дозволяє вказати повідомлення про фіксацію.

        -т, --таг
            Створіть тег, використовуючи tags_subdir замість гілок_subdir
            вказаний під час git svn init.

Попередні версії git не забезпечують спосіб створення гілки svn.


4

@kch Я щойно (7 грудня 2008 р.) склав тег v1.6.1-rc1 git і він містить команду гілки gn svn та документацію для неї. Отже, v1.6.1 випуск git повинен (сподіваємось) містити цю команду.


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