"git clone --mirror"是否危险?

3
我将要将一堆存储库从bitbucket.org迁移到一个本地Bitbucket服务器实例。我无法决定是克隆每个存储库为--bare还是--mirror。
脚本流程似乎非常简单:
1. 从bitbucket.org获取存储库并将其写入文件以备使用和保留为日志。(已完成,可行)
2. 读取文件,提取存储库,repo slug(repo name)并将它们克隆。(已使用--mirror工作)
3. 对于每个克隆的repo,运行: - git gc --auto清理repos - 在新的本地服务器上从slug创建repo - git remote set-url origin ssh://on_prem_server:7999/PROJ/REPO - git push --all origin - git push --tags origin
所以我实际上不是镜像bitbucket.org repos而是迁移它们。我的理解是git clone --mirror给出原始存储库的真实副本。而git clone --bare则不会,至少需要之后一个fetch。这就是为什么我最初认为使用--mirror是最好的。
但现在我担心使用镜像可能存在某些危险。
因此我的问题是:
1. 使用git clone --mirror是否存在任何危险,我应该意识到?
2. 我是否应该使用--mirror或--bare足够好?
1个回答

4

--mirror 的意思是“按原样”复制所有引用(而不是仅复制分支并将其映射到远程跟踪引用,例如)。您的用例在其预期目的范围内。

(只是为了澄清 - --bare 也直接映射引用,而不是从分支创建远程跟踪引用,但它不像--mirror那样复制所有引用。)


1
那么,每当您使用 --mirror 时,它只会单向镜像,对吗?我的意思是说,没有可能将不需要的更改推送到原始上游存储库,对吗? - tdh
1
@tdh - 你对“--mirror”这个词读得太多了。 “--mirror”选项的意思就是我上面说的。与任何克隆一样,默认情况下,源存储库设置为远程存储库。如果您向其推送更改,则更改将被推送到该存储库。如果您不想这样做,请不要这样做(您始终可以使用“git remote remove origin”)。 - Mark Adelsberger
好的,谢谢你的回复!我很感激。我认为镜像是正确的选择。 - tdh
我在Duplicating a repository找到了这个信息,“与裸克隆一样,镜像克隆包括所有远程分支和标签,但每次获取时所有本地引用都将被覆盖,因此它始终与原始存储库相同。”这进一步澄清了我的问题。感谢用户@Eat at Joes最初在此问题中发布链接。 - cb2
与其他类型的存储库一样,您可以使用 git remote set-url --push origin no_push(对于每个要设置为只读的远程仓库都要重复此操作)来避免意外推送。当需要时,您仍然可以显式地使用 git push $URL 进行推送 ;) - Jim Klimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接