Объединить и сдвинуть все ветки Git - PullRequest
2 голосов
/ 22 декабря 2010

Я клонировал целый репозиторий подрывной деятельности std-layout с помощью git-svn. Мой git config определен как:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = https://firebird.svn.sourceforge.net/svnroot/firebird
    fetch = firebird/trunk:refs/remotes/trunk
    branches = firebird/branches/*:refs/remotes/*
    tags = firebird/tags/*:refs/remotes/tags/*
[remote "origin"]
    url = git@github.com:asfernandes/firebird.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/tags/*:refs/tags/*
    push = +refs/heads/*:refs/heads/*
    push = +refs/tags/*:refs/tags/*

Я помещаю все ветки в этот github с помощью приведенного ниже скрипта bash. У меня есть местные филиалы, отслеживающие удаленные.

#!/bin/sh
git svn fetch
for x in `echo B1_5_Release B2_0_Release B2_1_Release B2_5_Release`; do git reset --hard; git checkout $x; git merge remotes/$x; done
git push --all

Нет ли лучшего способа сделать это, не проверяя и не объединяя каждую ветку?

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

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Это должно работать, если я правильно читаю ваши настройки:

git svn fetch
for x in B1_5_Release B2_0_Release B2_1_Release B2_5_Release; do
    git push origin remotes/$x:$x
done

Это займет, например, remotes/B1_5_Release и переместит его в origin/B1_5_Release, и так далее для остальных ветвей в цикле.

Поскольку git push может принимать несколько <refspec> с, вы также можете сделать это следующим образом:

git svn fetch
refspecs=""
for x in B1_5_Release B2_0_Release B2_1_Release B2_5_Release; do
    refspecs="$refspecs remote/$x:$x"
done
git push origin $refspecs

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

0 голосов
/ 12 мая 2012

Вы можете конвертировать свой SVN-репозиторий, используя SubGit проект.Он преобразует ветки в refs / heads / , теги в refs / tags / ;так что в конечном итоге вы получите обычный Git-репозиторий, который вы можете отправить в GitHub, как и любой другой Git-репозиторий.Кстати, после установки SubGit в ваш репозиторий SVN ваш SVN-репозиторий будет автоматически синхронизирован с вашим Git-репозиторием (пока вы не запустите на нем «subgit uninstall»), поэтому никаких дополнительных усилий для дополнительной синхронизации не требуется.

...