我想,以反映所有可用的本地存储库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
Run Code Online (Sandbox Code Playgroud)
获取refs之间的差异显示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
Run Code Online (Sandbox Code Playgroud)
git -C mirror fetch即使在fetch = +refs/*:refs/*中指定,也不会获取注释mirror/config.
现在的问题是:我有什么遗失的东西吗?我正在使用git 2.3.0
当获取git clone或git fetch获得参考时,它们通常会使它们"打包".
解压缩的引用.git/refs/按照其全名存储在每个文件中,以便您获得.git/refs/heads/master并且.git/refs/notes/commits例如.
打包引用(当前)存储在一个文件中.git/packed-refs.这包含每行一个引用,以及一些引用的额外"去皮"变体(实际上是带注释的标记).
如果引用出现在两个地方,Git"更喜欢"解压缩的一个(这样在更新引用时它不必从打包文件中删除条目).更新引用通常会解压缩它:更新和/或更容易继续更新单个条目文件,而.git/refs/heads/master不是继续替换多条目文件中的一行.
允许Git随时打开包装或重新包装参考,所以只保留diff两.git棵树并不能保证对你有任何好处.(同样适用于打包和解包的对象,但我看到你只是在扩展refs子目录.)所以你引用的diff输出没有说明是否克隆了这些音符.要查看是否克隆了笔记,请进入克隆并使用读取笔记的操作.
在任何情况下,如果有fetch = +refs/*:refs/*一行,您应该复制备注.