我有一个git repo,我的公司为我分配了一个空的svn repo来存储我的代码。所以我想做的就是将svn repo添加为我现有的git repo的遥控器然后推动它。
现在,所有git-svn教程都以&#34开头;首先克隆svn repo,然后添加代码"。这对我不起作用,因为我已经有了一个现有的git repo。
我还找到了一些将svn分支导入git repo的教程,但这也不是我需要的,我需要将git repo导入svn repo。
我尝试简单地执行git svn init http://remote-repo
,然后git svn rebase
,但结束时为"无法确定工作树历史记录中的上游SVN信息。"
我猜this guy有同样的问题,但他没有答案。关于如何做到这一点的任何想法?
编辑:
我做了一些额外的愚蠢,但无济于事。我把git历史嫁接到了svn历史并且做了rebase,但它没有解决问题。奇怪。这就是我所做的。
我做过git svn init
之后:
git svn fetch # so now I see the svn history in my git repo - I have two unconnected histories in my repo
git checkout svn-git #checking out svn remote
git checkout -b voracle_svn # putting content of the remote to a branch
然后在gitk中我创建了名为" graft_child"指向我最初的git提交(我的git历史的开始)并将其移植到svn分支的HEAD上:
git checkout graft_child # checking out the start of git repo
git reset --mixed voracle_svn #positioning myself to the HEAD of svn remote
git commit -am "Grafting git repo onto svn" #as the message said
然后我添加了孩子和父提交的SHA1 ID到.git / info / grafts和resetarted gitk。 Gitk现在显示了单一的历史(尽管有混乱的日期),移植成功。然后我重新设置了svn分支:
git checkout voracle_svn # checking out the branch wich points to the HEAD of svn repo
git rebase master
这个成功快速转发的voracle_svn为master,这意味着我应该可以将我的repo推送到SVN。或者我想,因为
git svn rebase
再次给了我"无法确定工作树历史记录中的上游SVN信息。"
现在我真的没有想法: - (
答案 0 :(得分:10)
简答
你应该先用svn客户端的一些提交来初始化这个svn repo,就像这样。
$ touch foobar
$ svn add foobar
$ svn ci -m "init svn repo for git svn can detect upstream"
长答案
如果git svn clone xxx
时svn repo为空,git客户端无法检测工作树历史记录中的上游svn信息,因此您应该像上面那样初始化svn repo。
我们假设您的本地git repo路径为/path/to/git_work_tree
,您的svn repo url为http://path/to/svn_remote_url
。
svn client的init svn repo。
$ svn co http://path/to/svn_remote_url svn_work_tree
$ cd /path/to/svn_work_tree
$ touch foobar
$ svn add foobar
$ svn ci -m "init svn repo"
git svn将你的svn repo克隆到本地。
$ git svn clone http://path/to/svn_remote_url git_svn_work_tree
将您当地的git repo合并到git_svn_worktree
$ cd /path/to/git_svn_work_tree
$ git pull /path/to/git_work_tree
现在您终于可以提交代码
$ cd /path/to/git_svn_worktree
$ git svn rebase
$ git svn dcommit
很有趣!