git克隆帮助页面有这样说——mirror:

设置远程存储库的镜像。这意味着——裸露。

但没有详细说明——mirror克隆与——bare克隆的不同之处。


当前回答

我今天对git-2.0.0的测试表明——mirror选项没有复制钩子、配置文件、描述文件、info/exclude文件,至少在我的测试用例中没有复制一些引用(我不理解)。我不会称它为“功能完全相同的副本,可以与原件互换”。

-bash-3.2$ git --version
git version 2.0.0
-bash-3.2$ git clone --mirror /git/hooks
Cloning into bare repository 'hooks.git'...
done.

-bash-3.2$ diff --brief -r /git/hooks.git hooks.git
Files /git/hooks.git/config and hooks.git/config differ
Files /git/hooks.git/description and hooks.git/description differ
...
Only in hooks.git/hooks: applypatch-msg.sample
...
Only in /git/hooks.git/hooks: post-receive
...
Files /git/hooks.git/info/exclude and hooks.git/info/exclude differ
...
Files /git/hooks.git/packed-refs and hooks.git/packed-refs differ
Only in /git/hooks.git/refs/heads: fake_branch
Only in /git/hooks.git/refs/heads: master
Only in /git/hooks.git/refs: meta

其他回答

$ git clone --bare https://github.com/example

这个命令将使新的“example”目录本身为$GIT_DIR(而不是example/.git)。同样,远程的分支头被直接复制到相应的本地分支头,而不需要映射。使用此选项时,既不会创建远程跟踪分支,也不会创建相关配置变量。

$ git clone --mirror https://github.com/example

与裸克隆一样,镜像克隆包括所有远程分支和标记,但所有本地引用(包括远程跟踪分支、注释等)在每次获取时都将被覆盖,因此它将始终与原始存储库相同。

$ git clone --mirror $URL

速记是为了什么

$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)

(从这里直接复制)

当前的手册是这么说的:

与——bare相比,——mirror不仅将源的本地分支映射到目标的本地分支,它还映射所有的引用(包括远程分支,notes等),并设置一个refspec配置,以便所有这些引用都被目标库中的git远程更新覆盖。

一个克隆复制的裁判从远程和stuff他们到一个子目录名为“这些是裁判,远程拥有”。

镜像从远程复制裁判,并把他们放在自己的顶级-它替换自己的裁判与那些远程。

这意味着当有人从你的镜像中提取并将镜像的引用放入他们的子目录时,他们将得到与原始镜像相同的引用。从最新镜像中获取的结果与直接从初始回购中获取的结果相同。

GitHub文档中关于复制存储库的详细解释:

与裸克隆一样,镜像克隆包括所有远程分支和标记,但每次获取时都会覆盖所有本地引用,因此它始终与原始存储库相同。

我添加了一张图片,显示镜像和裸之间的差异。 左边是光秃秃的,右边是镜子。你可以清楚,镜像的配置文件有fetch key,这意味着你可以通过git remote update或git fetch——all来更新它