1

如何从我的笔记本电脑(在家)将 git 存储库克隆到服务器(在大学),同时从作为主要代码库的另一个 uni 的第三个(svn)存储库获取大部分存储库。我想通过最大化 uniOne<->uniTwo 流量来最小化家庭<->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

克隆 repo 后应该能够从笔记本电脑中提取分支。

我已经尝试过:在 uniOne 上:git-svn clone uniTwo,git remote add Laptop,但是 git fetch 想要从笔记本电脑中获取全部内容。我想也许使用 git clone --depth x Laptop 然后将它们移植在一起可能会起作用,但它仍然需要传输所有源文件 Laptop->uniOne,而不仅仅是更改。我可以尝试从笔记本电脑导出所有补丁并将它们应用到新的 svn checkout 之上,然后让它跟踪我的笔记本电脑上的分支(如果可能的话),但是等到我下一个在 uni 然后会更容易只是正常克隆。

4

1 回答 1

0

让我们定义您的存储库:

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

我建议以下设置:

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

通过克隆uni/master创建笔记本电脑/ master 。在这里,您可以根据需要随时在本地提交。当你在大学时,通过运行从uni/master获取最新的更改(你总是必须做 --rebase 以保持历史线性,因为 SVN 不会理解 git-branches)。git pull --rebase

当您想将更改从笔记本电脑推送回git-svn时,您必须首先在笔记本电脑/主机上配置 git-svn 远程:

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

现在您可以将最新更改推送回uni -svn请注意,您可能必须首先更新对uni/mastergit svn dcommit中最新提交的引用。第一的:

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

不要试图从您的笔记本电脑/master推送到uni/master。这只会带来混乱,因为当 Git 再次尝试与git-svn同步时,变基/重写历史只会让 Git 感到困惑。

另请参阅http://www.tfnico.com/presentations/git-and-subversion我已经开始收集一堆关于同时使用 Git 和 SVN 的技巧。

于 2010-09-28T13:31:08.160 回答