保持svn存储库与git one同步

Mak*_*s_F 5 svn git git-svn git-merge git-rebase

我和我的团队伙伴正努力让我们的svn存储库与我们的git存储库保持同步.我们正在开发一个项目,我们被要求在svn存储库(由assembla.com网站托管)上共享我们的代码.由于我们习惯使用git对我们的代码进行版本控制,因此我们决定充分利用git提供的git svn功能.为了分享我们的所有工作并将其分成正确的分支,我们还有一个远程存储库用于git(bitbucket).

到目前为止,我们使用git承诺的所有工作都没有给我们带来任何问题,但是在错误出现后同步svn存储库错误.

我按照这个答案将现有的git存储库推送到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.
Run Code Online (Sandbox Code Playgroud)

要与我的主分支同步它我都试图

git merge master
Run Code Online (Sandbox Code Playgroud)

git rebase master
Run Code Online (Sandbox Code Playgroud)

但是,当git rebase master开始应用自第一次提交以来的所有更改并提供大量冲突时(当我已经在svn/trunk中进行了此更改时,因为在某种程度上我设法将一些更改推送到在线存储库;我们是(目前为r r46),git merge master顺利但是当我提交时,所有的更改都只在一个提交中总结,它表明"合并分支'主人'成为assembla_copy",而我宁愿它将所有单独的提交提交(就像它在开始时那样......).

如果我从主分支中提交,则所有提交都是分开的,但是主分支是重新分配的,因此所有具有主提交作为父分支的分支显示为与主分支分开的分支.

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

谢谢!

SKe*_*ken 8

我正在使用以下工作流程,目标是将本地git repo作为远程SVN存储库的某种奇特的svn客户端.

  • 使用初始化存储库git svn clone ....这使得主分支跟随SVN中继 - 在你的情况下这应该是svn/trunk.
  • 从主人创建一个本地"基线"分支:git checkout -b local.这将是master你的情况.
  • 开始在本地的功能分支上工作 - git checkout -b feature
  • 当我准备好提交远程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提交了一些内容一样.

希望这可以帮助.