小编典典

git clone --mirror 和 git clone --bare 有什么区别

all

git clone 帮助页面有这样的说法--mirror

设置远程存储库的镜像。这意味着--bare

但没有详细说明--mirror克隆与克隆有何不同--bare


阅读 1757

收藏
2022-03-07

共1个答案

小编典典

不同之处在于,在使用 时--mirror所有 refs 都 按原样
复制。这意味着一切:远程跟踪分支、注释、refs/originals/*(来自过滤器分支的备份)。克隆的 repo
拥有一切。它还设置为远程更新将从源重新获取所有内容(覆盖复制的参考)。这个想法实际上是镜像存储库,拥有一个完整的副本,这样您就可以在多个地方托管您的中央存储库,或者备份它。想想直接复制
repo,除了更优雅的 git 方式。

文档几乎说明了所有这些:

--mirror

设置源存储库的镜像。这意味着--bare。与 相比--bare--mirror不仅将源的本地分支映射到目标的本地分支,它还映射所有
refs(包括远程分支、注释等)并设置 refspec 配置,使得所有这些 refs 都被git remote update目标存储库中的 a
覆盖.

我最初的回答还指出了裸克隆和普通(非裸)克隆之间的区别——非裸克隆设置远程跟踪分支,只创建一个本地分支HEAD,而裸克隆直接复制分支。

假设 origin 有一些分支(master (HEAD), next, pu, 和maint),一些标签(v1, v2,
v3),一些远程分支(devA/master, devB/master),以及一些其他的 refs (refs/foo/bar,
refs/foo/baz,可能是笔记,存储,其他开发人员的命名空间,谁知道)。

  • git clone origin-url (non-bare):您将复制所有标签,一个本地分支master (HEAD)跟踪一个远程分支origin/master,以及远程分支origin/next、、origin/puorigin/maint。跟踪分支的设置是这样的,如果您执行类似的操作git fetch origin,它们将按照您的预期获取。任何远程分支(在克隆的远程中)和其他引用都将被完全忽略。

  • git clone --bare origin-url您将复制所有标签,本地分支、、、master (HEAD)和,next没有远程跟踪分支。也就是说,所有分支都按原样复制,并且完全独立设置,不期望再次获取。任何远程分支(在克隆的远程中)和其他引用都将被完全忽略。pu``maint

  • git clone --mirror origin-url这些参考中的每一个都将按原样复制。您将获得所有标签、本地分支master (HEAD)、、、和next、远程分支和、其他引用和。一切都与克隆遥控器中的完全一样。设置了远程跟踪,因此如果您运行所有 refs 将从原点覆盖,就好像您刚刚删除了镜像并重新克隆了它一样。正如文档最初所说,它是一面镜子。它应该是功能相同的副本,可与原件互换。pu``maint``devA/master``devB/master``refs/foo/bar``refs/foo/baz``git remote update

2022-03-07