我将尝试镜像一个本地仓库,包括所有可用的“refs”,包括“refs/notes/*”。然而,注释并没有如预期那样被克隆。
要重现此问题,请在空目录中执行以下命令:
要重现此问题,请在空目录中执行以下命令:
$ git init repo && cd repo
$ git commit --allow-empty -m 'initial commit'
$ git notes add -m 'Initial commit on empty repo' HEAD
$ git clone --mirror .git ../mirror
获取引用之间的差异显示镜像存储库中缺少notes
:
$ diff repo/.git/refs mirror/refs
Common subdirectories: repo/.git/refs/heads and mirror/refs/heads
Common subdirectories: repo/.git/refs/tags and mirror/refs/tags
Only in repo/.git/refs: notes
git -C mirror fetch
并没有获取注释,即使在mirror/config
中已经指定了fetch = +refs/*:refs/*
。
现在的问题是:我错过了什么吗?我正在使用git 2.3.0版本。
.git/packed-refs
是这里缺失的关键。从这个答案中最重要的一点是,你不应该依赖于 git 的文件结构,这就是为什么我的 diff 命令没有意义的原因。相反,应该使用管道命令,例如git for-each-ref
。 - Tim Keller