git-svn rebase和dcommit问题

时间:2010-12-14 06:16:00

标签: svn git git-svn

git version 1.7.1
svn, version 1.6.12
Ubuntu 10.10

我只是git而且我使用过svn。但我没有一起使用过。我有一个git存储库,我不得不将我的存储库更多地转换为subversion版本。所以我一直在使用git-svn。大部分时间都可以。但是,我发现围成一圈。

我是唯一一个参与这个项目的人。

我对我的分支进行了一些更改。然后我把它们分开:

git stage gateway.c

然后将它们本地提交给git:

git commit m"Made some changes"

然后我想将它们提交给subversion。获取最新更新:

git svn rebase

然后我收到以下消息:

It seems that I cannot create a rebase-apply directory, and
I wonder if you are in the middle of patch application or another
rebase.  If that is not the case, please
        rm -fr /home/joe/projects/gateway/.git/rebase-apply
and run me again.  I am stopping in case you still have something
valuable there.
rebase refs/remotes/trunk: command returned error: 1

I then doing the following:
rm -fr /home/joe/projects/gateway/.git/rebase-apply

然后我又做了一次改变:

git svn rebase

信息如下:

First, rewinding head to replay your work on top of it...
Applying: Issue with getting the port from the user context.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging driver.c
Auto-merging gateway.c
CONFLICT (content): Merge conflict in gateway.c
Failed to merge in the changes.
Patch failed at 0001 Issue with getting the port from the user context.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

rebase refs/remotes/trunk: command returned error: 1

这使我成为一个名为的分支,这个分支是什么?它是什么?:

*(no branch)

然后我解决了与该分支的冲突。然后我检查我的play_video分支。我试着做另一个:

svn git dcommit

我最终又转圈圈了。

在我开始拔头发之前,有些人可以给我一些建议,

非常感谢任何建议,

4 个答案:

答案 0 :(得分:3)

没有一个完整的答案,但似乎确定的是:

*(no branch)

表示您最终处于DETACHED HEAD模式,您可以在“Can I recover lost commits in a SVN repository using a local tracking git-svn branch?”的git svn上下文中看到。
另请参阅“Why did git detach my head?”。

所以请确保:

  • 在每个步骤中,您不在分离的HEAD(无分支)
  • dcommit SVN仓库中存在的分支(而不是纯粹的本地Git分支)

答案 1 :(得分:1)

您是否使用Google说明here将git repo导入svn?使用这些指令后我遇到了类似的错误:初始导入很顺利,但在某些地方出现了问题,我无法推送后续提交。

我只用git svn init解决了这个问题 - 一个新的git repo跟踪我的svn回购。

答案 2 :(得分:1)

解决冲突后,您需要在运行git rebase --continue

之前运行git svn dcommit

答案 3 :(得分:1)

我遇到了类似的问题,可能是因为我在推送到SVN遥控器之前推到了我的git遥控器,因此搞砸了我的git历史。似乎每次我尝试向svn提交一些内容时,git会尝试重放我以前的所有提交,即使它们已经存在于svn中,所以我只做git rebase --skip直到我回到最新提交,但最简单解决方案可能只是克隆一个新的git svn。