git clone 帮助页面有这样的说法--mirror:
--mirror
设置远程存储库的镜像。这意味着--bare。
--bare
但没有详细说明--mirror克隆与克隆有何不同--bare。
不同之处在于,在使用 时--mirror, 所有 refs 都 按原样 复制。这意味着一切:远程跟踪分支、注释、refs/originals/*(来自过滤器分支的备份)。克隆的 repo 拥有一切。它还设置为远程更新将从源重新获取所有内容(覆盖复制的参考)。这个想法实际上是镜像存储库,拥有一个完整的副本,这样您就可以在多个地方托管您的中央存储库,或者备份它。想想直接复制 repo,除了更优雅的 git 方式。
新文档几乎说明了所有这些:
--mirror 设置源存储库的镜像。这意味着--bare。与 相比--bare,--mirror不仅将源的本地分支映射到目标的本地分支,它还映射所有 refs(包括远程分支、注释等)并设置 refspec 配置,使得所有这些 refs 都被git remote update目标存储库中的 a 覆盖.
设置源存储库的镜像。这意味着--bare。与 相比--bare,--mirror不仅将源的本地分支映射到目标的本地分支,它还映射所有 refs(包括远程分支、注释等)并设置 refspec 配置,使得所有这些 refs 都被git remote update目标存储库中的 a 覆盖.
git remote update
我最初的回答还指出了裸克隆和普通(非裸)克隆之间的区别——非裸克隆设置远程跟踪分支,只创建一个本地分支HEAD,而裸克隆直接复制分支。
HEAD
假设 origin 有一些分支(master (HEAD), next, pu, 和maint),一些标签(v1, v2, v3),一些远程分支(devA/master, devB/master),以及一些其他的 refs (refs/foo/bar, refs/foo/baz,可能是笔记,存储,其他开发人员的命名空间,谁知道)。
master (HEAD)
next
pu
maint
v1
v2
v3
devA/master
devB/master
refs/foo/bar
refs/foo/baz
git clone origin-url (non-bare):您将复制所有标签,一个本地分支master (HEAD)跟踪一个远程分支origin/master,以及远程分支origin/next、、origin/pu和origin/maint。跟踪分支的设置是这样的,如果您执行类似的操作git fetch origin,它们将按照您的预期获取。任何远程分支(在克隆的远程中)和其他引用都将被完全忽略。
git clone origin-url
origin/master
origin/next
origin/pu
origin/maint
git fetch origin
git clone --bare origin-url :您将复制所有标签,本地分支、、、master (HEAD)和,next没有远程跟踪分支。也就是说,所有分支都按原样复制,并且完全独立设置,不期望再次获取。任何远程分支(在克隆的远程中)和其他引用都将被完全忽略。pu``maint
git clone --bare origin-url
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
git clone --mirror origin-url
pu``maint``devA/master``devB/master``refs/foo/bar``refs/foo/baz``git remote update