2011-11-11 45 views
4

所以我倾向于有一个最近克隆的回购协议,我需要在“非常接近”的网络上工作(经常在本地磁盘上)。还有一个“官方”服务器,我的工作流程真的希望成为原始服务器,但它通常很慢(或者是因为它超载,或者在远程网络上,或者两者都有)。将克隆从一个repo&set origin克隆到另一个是否“安全”?

(这个本地回购是官方服务器的一个克隆,可能会过去一两周过时,但回购非常大,从历史VCS导入的历史大约有十年,所以本地克隆从远程取回要快得多)

如果我git clone -o local /path/to/repo然后git remote add -f origin URI-for-offical-repo我最终会得到同样的东西(*)git clone URI-for-offical-repo会给我?

我特别警惕任何微妙的差异,可能会使我的回购推动不同。另外,如果我开始使用这种加速克隆的方法,那么可以使用这种方法制作“本地”回购,也许可以用于多代。

(*)相同加上额外的远程名称“local”,以及任何没有从本地推送到官方服务器的东西。

回答

5

简答:是的,可能。

长答案:“原点”只是您通常想要推送的别名。只要新的目的地与您从(或空的存储库)提取的存储库相关联,并且您有写入权限,则它应该是安全的。

注意:我没有真正考虑过你的“伪代码”命令示例是明智的。但是,克隆的概念,然后改变“起源”的网址是一个明智的概念。当服务器地址已经移动时,我自己做了,或者我决定更改我的公共回购地点等。

请注意,如果新来源不是完全空的存储库,或者您的旧克隆本地回购(有没有比在当地一个较新提交),使用

git push --mirror #e.g. implicitly to "origin" 

可以覆盖,并在遥控器上丢弃的分支,如果你要它完全写入访问。当我不小心将.git/config数据从一个回购库复制并粘贴到一个不相关的回购库时,我设法做我自己,[幸运的是,它有很多最新的克隆;但我出汗了几秒钟当删除消息在我的屏幕上滚动;)])

+0

新的来源永远不会完全空白,而本地回购总是一个较旧的“新”来源克隆(我更新了问题以反映这一点)。我不会做“git push --mirror”,只有“git push”和“git push origin CURRENT-BRANCH” – Stripes

3

你在做什么看起来很好,但你可能正在寻找前一段时间添加到git clone的--reference选项。如果存在本地副本,则可以使用参考存储库包快速创建新克隆,然后仅从网络进行更新。例如:git clone --reference ./oldercopy $url newcopy

对于您目前的方案 - 只要树的相关,切换网址的遥控器没有问题。如果它们不相关,那么所有不愉快的错误消息都会显示出来。

+0

这是我的理解,如果您使用--reference并删除引用的回购(或运行一个gc,或一个过滤器),坏事情可能发生。我真的想避免坏事。 – Stripes

+0

我检查了这个 - 你是对的。如果参考资料库消失,您的新克隆就会遇到麻烦。它可以固定,但它看起来很可怕。 – patthoyts