如何使用本地Git存储库跟踪远程公共Subversion存储库?

时间:2010-12-17 07:40:43

标签: svn git git-svn

我一直试图通过阅读git-svn手册来解决这个问题,但我很难理解如何实现它。

我想做的是:

  1. 查看公共subversion主干
  2. 创建一个本地git仓库以跟踪此
  3. 创建一个我不会提交的“供应商”分支,仅用于从subversion repo中提取更改
  4. 为我希望使用的补丁创建git分支
  5. 将更新提取到“供应商”分支并合并到我的分支机构中。
  6. 使用git-format-patch
  7. 提交补丁

    我如何实现这一目标?

2 个答案:

答案 0 :(得分:4)

git-svn的建议工作流程:

  1. 使用上述git-svn拉取。
  2. 默认情况下,您将在master。不要直接在这个分支上工作。
  3. 在功能分支中进行所有开发(使用master中的git checkout -b <feature>)。
  4. 提交对功能分支的更改。
  5. 在功能分支中执行git rebase master。 5A。如果您想在此时引入svn更新,请切换到master并执行git svn rebase然后切换回功能分支,执行git rebase master
  6. 切换到主分支并执行git merge <feature>
  7. 检查合并是否顺利,然后执行git svn dcommit将更改推送到svn。
  8. 请记住,一旦完成git svn dcommit,您的所有更改都将对其他人可见。因此,在执行git svn dcommit之前,请务必确保您已正确完成任务。

答案 1 :(得分:0)

你想使用git-svn。我不确定可用教程的状态是什么,但这里有一些东西可以帮助你入门。

创建本地git仓库。

How to git-svn clone the last n revisions from a Subversion repository?

要从svn获取新版本,请使用git svn fetch。这将获取新的修订并将它们放在远程分支上。您可以在自己的分支上进行任何所需的更改,然后使用git svn dcommit进行提交。

但是,我会小心git merge命令。使用git-svn时,我总是建议使用rebase,并使您的历史严格保持线性。 svn无法很好地跟踪git分支。如果你在git中有一个分支历史并尝试将其推送到svn,svn将只能代表该历史的一半。您不会丢失任何代码,但您将丢失提交的粒度。