git svn rebase总是需要强制推动

时间:2014-03-26 14:47:56

标签: git git-svn

我目前正在将我的团队从SVN迁移到GIT。

而不是克隆整个subversion repo,我选择了......

git svn clone http://foo.com/svn/branches/dev --no-minimize-url --authors-file=users.txt foo

这最终会为我提取dev分支。

然后我添加了一个git repo with

git remote add origin git@github.com:foo/bar.git

所以,我遇到的问题是让GitHub回购更新到SVN中的内容。

我不得不对.gitattributes进行一些更改(这可能需要另一个问题),因为我在OSX上运行导入过程,并且因为大多数代码是在Windows中编写的,所以我一直在遇到行结束问题。

我为更新GitHub所做的工作是......

git svn fetch
git svn rebase

无论出于何种原因,每次我执行此操作时,我都必须执行git push --force,因为remote/origin/master已分散。

那么,我是否应该重新定位并简单地获取并拥有一个实际的本地git-svn分支并将其合并到master中?或者还有其他我想念的东西?

1 个答案:

答案 0 :(得分:1)

我不清楚你的意图是让GitHub回购只是SVN回购的确切镜像,或者你是否还要在你当地的git仓库中做额外的工作,你试图推动两个回购。

如果意图只是为了反映回购,那么你的流程应该可以正常工作。运行:

git svn fetch
git svn rebase

首先应将新SVN提交下拉到您的远程跟踪分支(即refs / remotes / trunk),然后仅执行对该提交的本地主引用的快进。然后你应该能够毫无问题地将这些新的提交推送到GitHub。

但是,如果您对repo进行本地更改,那么git svn rebase将基本上重写那些本地提交。如果你已经将这些本地提交推送到GitHub,那么新的提交实际上是一个新的分支,会导致你分歧并需要强制推动。

另外需要注意的是......如果你正在进行本地提交,那么通过git svn dcommit提交回SVN请注意你的本地提交实际上是被重写的,即使SVN repo在此期间没有分歧。 git-svn工具会重写您的提交,以包含一个唯一的标识符,用于关联两个repos中的提交。根据您推送的顺序,当您同时处理SVN远程和git远程时,这可能会导致问题。如果您先将提交推送到GitHub,然后再推送SVN,那么这也会导致您出现分歧。来自the git-scm book

  

这将获取您在Subversion服务器代码之上进行的所有提交,为每个提交进行Subversion提交,然后重写您的本地Git提交以包含唯一标识符。这很重要,因为它意味着提交的所有SHA-1校验和都会发生变化。部分由于这个原因,与Subversion服务器同时使用基于Git的项目远程版本并不是一个好主意。

所有这一切的结果是,如果你纯粹是为了镜像,或者如果你对流程非常小心,你可以通过并发SVN和git遥控器来逃脱。否则,事情将永远令人头疼。

如果我误解了你问题的任何部分,请告诉我。 HTH