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

2020/01/26 12:47
阅读数 1.4W

git clone帮助页面上有关于--mirror

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

但没有详细介绍--mirror克隆与--bare克隆--mirror不同。


#1楼

克隆将从远程服务器复制参考,并将其填充到名为“这些是远程服务器具有的参考”的子目录中。

镜像从远程复制参考,并将其放入自己的顶层-用远程替换其自身的参考。

这意味着,当有人从您的镜像中拉出并将镜像的ref塞入其子目录时,他们将获得与原始镜像相同的ref。 从最新镜像中获取的结果与直接从初始存储库中获取的结果相同。


#2楼

我今天使用git-2.0.0进行的测试表明--mirror选项不会复制钩子,配置文件,描述文件,信息/排除文件,至少在我的测试用例中是一些引用(我不这样做)不能理解。)我不会将其称为“功能相同的副本,可以与原始副本互换”。

-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

#3楼

GitHub文档中有关复制存储库的细微差别说明:

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


#4楼

我添加图片,显示镜像和裸机之间的config差异。 在此处输入图片说明 左边是裸露的,右边是镜子。 您可以清楚地知道,镜像的配置文件具有fetch密钥,这意味着您可以通过git remote updategit fetch --all git remote update


#5楼

$ git clone --mirror $URL

是...的简写

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

(直接从这里复制)

当前手册页的显示方式:

--bare相比,-- --mirror不仅将源的本地分支映射到目标的本地分支,还映射所有引用(包括远程分支,注释等)并设置一个refspec配置,以使所有这些引用都被覆盖通过目标存储库中的git remote update

展开阅读全文
Git
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部