将svn代码库与git代码库保持同步

5
我的团队和我正在努力让我们的svn存储库与git存储库同步。我们正在开发一个项目,并被要求在svn存储库(由assembla.com网站托管)上共享我们的代码。由于我们习惯使用git对我们的代码进行版本控制,我们决定充分利用git提供的git svn功能。为了共享我们的所有工作并将其保留在正确的分支中,我们也为git拥有一个远程仓库(bitbucket)。
到目前为止,我们用git提交的所有工作都没有给我们带来问题,但是当涉及到同步svn存储库时,一堆错误接踵而至。
我按照这个回答Pushing an existing git repository to SVN来连接svn存储库和git存储库,但是经过几次合并和提交之后,我遇到了错误,无法再次提交更改了。
现在我有一个分支,它是svn / trunk的副本。
$ git checkout -b assembla_copy -t svn/trunk
  Branch assembla_copy set up to track local ref refs/remotes/svn/trunk.
  Switched to a new branch 'assembla_copy'

$ git svn rebase svn/trunk
Current branch assembla_copy is up to date.

为了将其与我的主分支同步,我尝试了以下两种方法:

git merge master

并且

git rebase master

但是,当git rebase master开始应用自第一个提交以来的所有更改并产生大量冲突时(当我已经在svn/trunk中拥有这些更改时,由于某种方式我设法将一些更改推送到在线仓库;我们现在处于r46),git merge master很好,但当我进行dcommit时,所有更改都被汇总到一个提交中,其中说明“将分支'master'合并到assembla_copy”,而我希望它能提交所有单独的提交(就像一开始做的那样..)。

如果我从主分支进行dcommit,所有提交都是分开的,但然后重新定位了主分支,因此所有具有主提交作为父级的分支显示为与主分支分开的形式..

您能否向我解释正确的工作流程,以便svn存储库镜像git存储库,其中所有工作都完成了(svn只是副本)? 您能否仅使用标准git命令而不是复杂的bash脚本,因为我在过去一周搜索解决方案时看到了一些答案?

谢谢!

1个回答

8
我使用以下工作流程,旨在将本地git仓库作为某种高级svn客户端,连接到远程SVN仓库。
1. 使用“git svn clone ...”初始化仓库。这会让主分支遵循SVN主干 - 在您的情况下应该是svn/trunk。 2. 从主分支创建一个本地的“基准线”分支:git checkout -b local。这在您的情况下应该是master。 3. 开始在local的特性分支上工作:git checkout -b feature。 4. 当我准备提交到远程SVN时: - git checkout master - git svn rebase - 拉取SVN更新 - 如果有任何更新,就将它们合并到local中 - git rebase --onto master local feature - 将在特性分支中相对于“local”基线所做的更改应用到“master”分支 - 将特性分支合并到主分支:git checkout master,git merge feature - git svn dcommit - 将更改提交到SVN - 将新特性合并到本地基线:git checkout local,git merge master - 类似于其他人提交了一些内容到SVN。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接