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