Git 注释在 `git clone --mirror` 后丢失
Git notes missing after `git clone --mirror`
我正在尝试使用所有可用 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
获取 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
git -C mirror fetch
也不会获取注释,即使在 mirror/config
.
中指定了 fetch = +refs/*:refs/*
现在的问题是:我是否遗漏了什么?我正在使用 git 2.3.0
当git clone
或git fetch
获得引用时,他们通常会留下"packed"。
解压缩后的引用根据其全名在 .git/refs/
中每个文件存储一个,例如,您可以得到 .git/refs/heads/master
和 .git/refs/notes/commits
。
打包的引用(当前)全部存储在一个文件中,.git/packed-refs
。这包含每行一个参考,加上一些参考的额外 "peeled" 变体(实际上是带注释的标签)。
如果引用出现在两个地方,Git "prefers" 解压缩的引用(这样它就不必在更新引用时从打包文件中删除条目)。更新引用通常会解压它:and/or 像 .git/refs/heads/master
这样的单条目文件比在多条目文件中不断替换一行更容易 and/or。
Git 可以随时解包或重新打包引用,所以简单地 diff
ing 两棵 .git
树并不能保证对你有任何好处。 (同样适用于打包和解包的 objects,但我看到你只是在区分 refs
子目录。)所以你引用的 diff 输出没有说明笔记是否被克隆。要查看笔记是否被克隆,请进入克隆并使用读取笔记的操作。
无论如何,如果有 fetch = +refs/*:refs/*
行,您 应该 复制笔记。
我正在尝试使用所有可用 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
获取 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
git -C mirror fetch
也不会获取注释,即使在 mirror/config
.
fetch = +refs/*:refs/*
现在的问题是:我是否遗漏了什么?我正在使用 git 2.3.0
当git clone
或git fetch
获得引用时,他们通常会留下"packed"。
解压缩后的引用根据其全名在 .git/refs/
中每个文件存储一个,例如,您可以得到 .git/refs/heads/master
和 .git/refs/notes/commits
。
打包的引用(当前)全部存储在一个文件中,.git/packed-refs
。这包含每行一个参考,加上一些参考的额外 "peeled" 变体(实际上是带注释的标签)。
如果引用出现在两个地方,Git "prefers" 解压缩的引用(这样它就不必在更新引用时从打包文件中删除条目)。更新引用通常会解压它:and/or 像 .git/refs/heads/master
这样的单条目文件比在多条目文件中不断替换一行更容易 and/or。
Git 可以随时解包或重新打包引用,所以简单地 diff
ing 两棵 .git
树并不能保证对你有任何好处。 (同样适用于打包和解包的 objects,但我看到你只是在区分 refs
子目录。)所以你引用的 diff 输出没有说明笔记是否被克隆。要查看笔记是否被克隆,请进入克隆并使用读取笔记的操作。
无论如何,如果有 fetch = +refs/*:refs/*
行,您 应该 复制笔记。