Git-SVN:从集中式SVN服务器更新Git repo

时间:2013-05-31 12:16:50

标签: git git-svn git-pull git-fetch

我正在开发一个项目,每个人都使用SVN作为集中式服务器,每个人都推动他们在该服务器上所做的更改。我想在本地使用Git,我对git svn很新。我用git svn clone做了git svn clone -r HEAD https://svn.repo/app/branch存储库,我想通过git进行更新。

我需要一个'git pull like'命令,但要从特定版本的SVN服务器仓库中提取。 还有一个'fetch like'命令从SVN服务器repo的特定版本中获取?

我的克隆项目中没有任何.svn个文件夹,git remote没有给我任何东西。但是我做了一个git config -l我得到了SVN服务器的URL,所以不知怎的,我与SVN服务器链接了。我不知道如何取或拉。

谢谢!

2 个答案:

答案 0 :(得分:43)

通过Git处理Subversion存储库的最佳方式:

  1. git svn init -s https://svn.repo/app/ myrepo假设在https://svn.repo/app/下,repo包含标准/trunkbranchestags子目录
  2. 在myrepo中执行git svn fetch直到不再提取提交(可能需要一段时间,有时会在Windows下中止)。
  3. 通过git checkout -b trunk remotes/trunk
  4. 查看特定的Subversion分支或中继

    然后你可以简单地浏览,破解并提交你的Git Repo,其中包含所有Subversion提交和分支。

    • 使用git svn rebase
    • 从SVN提取新提交
    • 使用git svn dcommit
    • 将您的本地提交推送到SVN

    要跳转到特定的Subversion修订版,您只需要通过git log浏览历史记录并搜索镜像相应的Subversion修订的提交。您可以在提交消息的git-svn-id:行中轻松发现Subversion修订版。只需使用git checkout <commithash>明确签出该版本。

答案 1 :(得分:11)

一个好的开始:

要将新的svn提交提取到本地仓库:git svn rebase

将本地提交推送到SVN:git svn dcommit

您可能必须使用git stashgit stash pop,然后在使用上述两个命令时,如果您的工作副本发生了未经修改的更改。