通过获取原始svn repo中的所有svn部分来克隆git-svn repo

时间:2010-09-19 21:38:34

标签: linux git git-svn clone fetch

如何从我的笔记本电脑(在家里)克服一个git repo到服务器(在大学),同时从另一个主要代码库的uni获得第三个(svn)repo的大部分repo。我想通过最大化uniOne< - > uniTwo流量来最小化home< - > uni流量。

这就是我现在在笔记本电脑上的内容:

--o--o--o---o---o---o git-svn trunk  
         `--o--o-o--o git mybranch  

这是我想在uniOne上得到的:

--o--o--o---o---o---o git-svn trunk <-- from uniTwo  
         `--o--o-o--o git mybranch  <-- from Laptop

克隆后,回购应该可以从笔记本电脑中拉出分支。

我试过:在uniOne上:git-svn克隆uniTwo,git远程添加笔记本电脑,但随后git fetch希望从笔记本电脑获得整个东西。我想也许可以使用git clone --depth x Laptop然后将它们移植到一起可能会有效但它仍然要求所有的源文件都被转移到Laptop-&gt; uniOne,而不仅仅是更改。我可以尝试从笔记本电脑中导出所有补丁并在新的svn结账时应用它们然后让它跟踪我的笔记本电脑上的分支(如果可能的话),但是等到我下一次在大学时更容易只是正常克隆。

1 个答案:

答案 0 :(得分:0)

让我们定义您的存储库:

  • git-svn &lt; - 这是大学的Subversion资料库
  • uni / master &lt; - 这是您大学的Git存储库。这是一个“获取存储库”,它从Subversion repo获取最新的历史记录。
  • laptop / master &lt; - 这是您笔记本电脑上的Git存储库。这是你工作的地方。

我建议采用以下设置:

通过 git-svn git svn clone创建 uni / master 。 通过运行git svn rebase(使用提交挂钩,cron-job或每个手动触发)自动或定期使用 git-svn 的最新更改来更新 uni / master 你在大学的时候。)

通过克隆 uni / master 创建 laptop / master 。在这里,您可以根据需要随时在本地提交。当您在大学时,通过运行git pull --rebase uni / master 获取最新更改(您始终必须执行--rebase以保持历史线性,因为SVN将无法理解git-分支)。

当您想要将笔记本电脑的更改推送回 git-svn 时,您必须首先在 laptop / master 上配置git-svn遥控器:

git svn init https://url.to.uni-svn-repo

现在,您可以使用git svn dcommit将最新更改恢复为 uni-svn 。请注意,您可能必须首先更新 uni / master 中对最新提交的引用。第一:

git update-ref refs/remotes/git-svn refs/remotes/uni/master

请勿尝试从 laptop / master 推送到 uni / master 。这只会带来混乱,因为当Git再次尝试与 git-svn 同步时,重新定位/重写历史会让Git感到困惑。

另见http://www.tfnico.com/presentations/git-and-subversion我已经开始收集一些与Git和SVN一起使用的技巧。