我使用 git-svn's 从本地远程服务器上克隆了一个现有的 svn repo git svn clone <orig_svn_repo_path>
。我现在想为本地克隆仓库的几个分支中的一个特定分支设置一个远程仓库说<cloned_repo>/branches/<branch_to_clone>
。这可能吗?回购的其余部分在大小方面非常庞大,因为我只有那个特定的分支需要处理,我宁愿为它设置一个远程镜像。另外,如果可能的话,我将如何使用正在处理的分支更新原始 svn 存储库,并将我的更改推送到远程 git 分支(repo)以使其与本地分支保持同步(更新到 svn回购)?
1 回答
如果您想向 SVN 提交(使用git svn dcommit
),则不应使用任何git clone
git 存储库的 a 。
您应该改为使用git svn init
带有适当参数的命令,以便仅获取您感兴趣的 SVN 目录,然后获取git svn fetch
. 您可以根据需要多次执行此操作。
如果您执行一个git clone
设置为跟踪 SVN 的存储库,您会遇到一个问题:git-svn 修改它通过 发送到 Subversion 的提交主体dcommit
,添加git-svn-id
一行。这是一种历史改写。因此,如果您有一个 SVN-oblivious 存储库,它推送到支持 SVN 的存储库,然后推送到 Subversion 本身,那么当您git push
第二次尝试执行时,您将遇到问题。
只是为了确保我们清楚,问题是第一个存储库在执行dcommit
. 因此,从那时起,任何下拉到另一个 git repo 的新更改都将具有不同的提交哈希,需要强制拉/推。这就像如果有人要重新设置公开可见的更改会发生什么:请参阅此 SO answer。
从根本上说,git-svn 旨在与 SVN 存储库本身一起用作“中央”存储库。
如果你想要一个Subversion 的只读副本,从不做另一个dcommit
(或者至少在你dcommit
从第一个 git repo 做一个之后不让第二个 git repo 保持最新),那么你很好。只需git clone
使用仅限于您感兴趣的分支的 refspec 即可。