是不是;“安全”;从一个repo克隆git&;将原点设置为另一个原点?

是不是;“安全”;从一个repo克隆git&;将原点设置为另一个原点?,git,Git,因此,我倾向于拥有一个最近的repo克隆,我需要在“非常接近”的网络上工作(通常在本地磁盘上)。还有一个“官方”服务器,我的工作流程确实希望它成为源服务器,但它通常非常慢(要么是因为过载,要么是在远程网络上,或者两者兼而有之) (此本地repo是官方服务器的克隆,可能会过期一到两周,但repo非常大,并且从较旧的VCSE导入了大约十年的历史,因此本地克隆加上从远程获取的速度要快得多) 如果我git clone-o local/path/to/repo然后git remote add-f orig

因此,我倾向于拥有一个最近的repo克隆,我需要在“非常接近”的网络上工作(通常在本地磁盘上)。还有一个“官方”服务器,我的工作流程确实希望它成为源服务器,但它通常非常慢(要么是因为过载,要么是在远程网络上,或者两者兼而有之)

(此本地repo是官方服务器的克隆,可能会过期一到两周,但repo非常大,并且从较旧的VCSE导入了大约十年的历史,因此本地克隆加上从远程获取的速度要快得多)

如果我
git clone-o local/path/to/repo
然后
git remote add-f origin URI for office repo
我会得到与我相同的东西(*)
git clone URI for office repo

我特别警惕任何细微的差异,这些差异可能会使我的回购协议有所不同。此外,如果我开始使用这种加速克隆的方法,“本地”回购可能已经使用这种方法进行了多次


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

简短回答:可能是

答案很长:“origin”只是一个别名,表示您通常想要推送的位置。只要新目的地与您从中提取的存储库(或空存储库)相关,并且您具有对其的写访问权限,它就应该是安全的

注意:我并不认为您的“伪代码”命令示例是合理的。但是克隆然后更改“源”的url的概念是一个明智的概念。当服务器地址移动,或者我决定改变我的公共回购位置时,我自己做过

但是要注意,如果新源不是完全空的存储库,或者不是本地repo的旧克隆(没有比本地repo更新的提交),请使用

如果您具有对远程服务器的完全写访问权限,则可以覆盖和放弃远程服务器上的分支。
(当我不小心将.git/config数据从一个repo复制并粘贴到一个不相关的repo时,我自己也做到了这一点。[幸运的是,它有很多最新的克隆;但当删除消息在我的屏幕上滚动时,我流了几秒钟的汗;)])

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


对于您当前的方案-如果树是相关的,那么切换远程url是没有问题的。如果它们是不相关的,那么所有令人不快的错误消息都会出现。

新来源永远不会完全为空,而本地回购协议始终是“新”来源的旧克隆(我更新了问题以反映这一点)。虽然我不做“git push--mirror”,只做“git push”和“git push origin CURRENT-BRANCH”,但我的理解是,如果使用--reference并删除引用的repo(或运行gc或过滤器),可能会发生不好的事情。我真的想避免不好的事情。我检查了这个-你是对的。如果引用存储库消失,则新克隆将出现问题。它是可以修复的,但是看起来很吓人。
git push --mirror #e.g. implicitly to "origin"