5

我和我的队友正在努力让我们的 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.

要将它与我的主分支同步,我都尝试过

git merge master

git rebase master

但是,虽然git rebase master开始应用自第一次提交以来的所有更改并产生大量冲突(当我已经在 svn/trunk 中进行了这些更改时,因为我以某种方式设法将一些更改推送到在线存储库;我们是ar r46 目前),git merge master一切正常,但是当我提交时,所有更改都汇总在一个提交中,其中声明“将分支'master'合并到 assembla_copy”,而我更希望它提交所有单独的提交(就像它在开始时所做的那样......)。

如果我从主分支提交,所有提交都是分开的,但是主分支被重新定位,所以所有以主提交为父的分支都显示为与主分支分离。

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

谢谢!

4

1 回答 1

8

我正在使用以下工作流程,目的是将本地 git 存储库作为远程 SVN 存储库的某种花哨的 svn 客户端。

  • 使用初始化存储库git svn clone ...。这使主分支跟随 SVN 主干 - 在您的情况下应该是 svn/trunk。
  • 从 master 创建一个本地“基线”分支: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应用​​于分支
    • 合并特征分支到 master: git checkout master,git merge feature
    • git svn dcommit- 提交对 SVN 的更改
    • 将新功能合并到本地基线中:git checkout local, git merge master- 就像其他人向 SVN 提交了一些东西一样。

希望这可以帮助。

于 2013-09-09T08:03:33.807 回答