git-svn: как мне создать новую ветку svn через git?

193

У меня есть Git-репозиторий, который отслеживает SVN-репозиторий. Я клонировал это используя --stdlayout.

Я создал новый локальный филиал через git checkout -b foobar

Теперь я хочу, чтобы эта ветка …/branches/foobarпопала в репозиторий SVN.

Как мне это сделать?

(Вырезал много следственного текста. См. историю вопроса, если вам это интересно)

KCH
источник

Ответы:

280

Я знаю, что на этот вопрос был дан ответ некоторое время назад, но после прочтения я могу помочь добавить примеры конкретной команды git svn branch и связать ее с типичным рабочим процессом.

Вроде кч ответил, пользуйся 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 / remotes / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Следующий родитель с do_switch

Успешно прослеженный родитель r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(Ссылки / пультов ДУ / auth_bug)

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

git checkout -b local/auth_bug auth_bug

Что означает «проверить и создать локальную ветвь с именем auth_bugи заставить ее следовать за удаленной веткой (последний параметр)auth_bug

Проверьте, что ваша локальная ветвь работает в этой удаленной ветке, используя dcommitwith --dry-run( -n):

git svn dcommit -n

И сервер SVN должен ответить с новым именем ветви:

Обязательство https://scm-server.com/svn/portal/branches/auth_bug ...

Джеспер Ренн-Йенсен
источник
2
Да, git co означает, что Джеспер создал псевдоним git.
Джейсон Аксельсон
3
обновлен и заменен git coс git checkoutтаким , что пример может работать для кого
Jesper ронн-Jensen
5
Я уже проголосовал за этот ответ, но я не знаю, сколько раз я продолжаю возвращаться. Спасибо!
Бен Доерр
35
В git-svn branchкоманде есть сложная часть - вы должны быть онлайн, чтобы создать новую ветку таким образом. Вы можете сделать следующее в автономном режиме: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. И когда он-лайн подтолкнуть это изменение, сделав 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
Вадишев
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 dcommit7. Удалить временную веткуgit branch -D foobar-new
jjcf89
64

по состоянию на git v1.6.1, git svn branchдоступно.

Из Git Docs:

    филиал
        Создайте ветку в репозитории SVN.

        -м, - сообщение
            Позволяет указать сообщение коммита.

        -t, --tag
            Создайте тег, используя tags_subdir вместо branch_subdir
            указано во время git svn init.

Предыдущие версии git не предоставляют способ создания ветки svn.

KCH
источник
4

@kch Я только что (7 декабря 2008 г.) скомпилировал тег git v1.6.1-rc1, и он содержит команду git svn branch и документацию для нее. Таким образом, выпуск git v1.6.1 должен (надеюсь) содержать эту команду.

Брайан Дж. Свифт
источник
действительно, я установил 1.6.1 сейчас и команда доступна. обновил мой ответ соответственно.
KCH