如何从我的笔记本电脑(在家里)克服一个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结账时应用它们然后让它跟踪我的笔记本电脑上的分支(如果可能的话),但是等到我下一次在大学时更容易只是正常克隆。
答案 0 :(得分:0)
让我们定义您的存储库:
我建议采用以下设置:
通过 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一起使用的技巧。