所以我倾向于最近有一个我需要处理的回购的克隆"非常接近"网络明智(经常在本地磁盘上)。还有一个"官员"服务器,我的工作流真的想成为原点,但它经常很慢(因为它过载,或者在远程网络上,或两者兼而有之)。
(这个本地仓库是官方服务器的克隆,趋向于一周或两周过时,但是回购非常庞大,并且从旧的VCS引入了大约十年的历史记录,因此本地克隆加了fetch来自遥控器的速度要快得多)
如果我git clone -o local /path/to/repo
然后git remote add -f origin URI-for-offical-repo
,我最终会得到同样的事情(*)git clone URI-for-offical-repo
会给我吗?
我特别警惕任何微妙的差异可能会使我的回购不同。此外,如果我开始使用这种加速克隆的方法,那么" local" repo可能是使用这种方法制作的,可能是多代。
(*)相同的加上额外的远程名称" local",以及任何没有从本地推送到官方服务器的内容。
答案 0 :(得分:5)
简短的回答:是的,可能。
答案很长:“起源”只是您通常想要推送的地方的别名。只要新目标与您从中提取的存储库(或空存储库)相关,并且您具有对它的写入权限,那么它应该是安全的。
注意:我并没有真正考虑过你的“伪代码”命令示例是明智的。但克隆的概念随后改变了“起源”的网址是一个明智的概念。我已经在服务器地址移动时自己完成了,或者我决定更改我的公共仓库位置等。
请注意,如果新来源不是一个完全空的存储库,或者是本地存储库的旧克隆(没有比本地存储更新的提交),请使用
git push --mirror #e.g. implicitly to "origin"
如果您具有对它的完全写入权限,可以覆盖并丢弃远程分支。 (这个我也设法自己做,当不小心地将.git / config数据从一个repo复制并粘贴到一个无关的repo。[幸运的是它有很多最新的克隆;但我是当删除消息在我的屏幕上滚动时会出汗几秒钟;)])
答案 1 :(得分:3)
你正在做的事情看起来很好,但你可能正在寻找前一段时间添加到git clone的--reference
选项。如果存在本地副本,则可以非常快速地使用引用存储库包创建新克隆,然后仅从网络进行更新。例如:git clone --reference ./oldercopy $url newcopy
对于您当前的方案 - 如果树是相关的,则切换URL的URL是没有问题的。如果它们不相关,那么将出现各种令人不快的错误消息。