合并并推送所有git分支
问题描述:
我已经用git-svn克隆了一个完整的std-layout subversion版本库。我的混帐配置定义为:合并并推送所有git分支
[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 = [email protected]: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远程分支。
答
这应该工作,如果我正确地读你的设置:
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>
S,你也可以做这样的:
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
其牺牲的只能运行一个实际推命令的好处有点可读性。
答
您可以使用SubGit项目来转换您的SVN存储库。它会将分支转换为refs/heads/,将标签转换为refs/tags/;这样你最终会得到一个通用的Git仓库,你可以像其他任何Git仓库一样将它推送到GitHub。 顺便将SubGit安装到你的SVN仓库后,你的SVN仓库将自动与你的Git仓库同步(直到你运行“subgit uninstall”),所以不需要额外的同步工作。
谢谢,这似乎工作正常! – 2010-12-23 21:16:28