为SVN存储库的特定git-svn分支创建远程Git分支作为镜像

时间:2013-01-28 17:41:24

标签: git svn git-svn git-remote

我使用git-svn的git svn clone <orig_svn_repo_path>在本地克隆了一个现有的svn repo。我现在想要为本地克隆的repo的几个分支中的特定分支设置一个远程仓库<cloned_repo>/branches/<branch_to_clone>。这可能吗?其余的repo在大小方面非常庞大,因为我只需要处理那个特定的分支,我宁愿为它设置一个远程镜像。如果可能的话,我如何更新原始的svn repo与正在处理的分支,并将我的更改推送到远程git分支(repo)以使其与本地分支保持同步(更新到svn)回购)?

1 个答案:

答案 0 :(得分:2)

如果你想提交SVN(使用git svn dcommit),你应该使用任何git存储库的git clone

您应该使用带有适当参数的git svn init命令,以便仅提取您感兴趣的SVN目录,然后提取git svn fetch。您可以根据需要多次执行此操作。

如果您设置了git clone设置为跟踪SVN的存储库,则会遇到问题:git-svn修改它通过dcommit发送给Subversion的提交正文,添加一个git-svn-id行。这是一种历史重写。因此,如果你有一个SVN不经意的存储库推送到SVN感知存储库,然后推送到Subversion本身,当你第二次尝试git push时,你会遇到问题。 p>

为了确保我们清楚,问题是第一个存储库会在执行dcommit时重写历史记录。因此,从该点开始下拉到另一个git repo的任何新更改将具有不同的提交哈希,需要强制拉/推。这就像有人要公开改变公众所发生的变化一样:见this SO answer

从根本上说,git-svn旨在与SVN存储库本身一起用作“中央”存储库。

如果你想要一个只读版本的Subversion,那么永远不要做另一个dcommit(或者至少在你做{{1}之后不要让第二个git repo保持最新状态从第一个开始),那你很好。只需使用仅限您感兴趣的分支的refspec执行dcommit