【发布时间】:2021-09-18 22:20:49
【问题描述】:
我已镜像 (clone --mirror) 一个没有远程引用的本地存储库,仅用于备份目的。我注意到备份的 repo 有一个 'packed-refs' 文件,里面有 local refs。
当我尝试将其克隆回来时,我得到了相同的“打包引用”文件,其中包含远程引用,例如 remotes/origin/heads/... 而不是本地引用。然后,我必须检查每个 refs 以获得本地 refs。
有没有办法,也许是一些clone 选项,能够直接恢复本地引用?
【问题讨论】:
-
packed-refs 文件与 unpacked refs 并没有什么特别之处:
git pack-refs将 unpacked refs 转换为packed refs,所以这一切都很正常。某些特定 ref 的未打包实例会覆盖已打包条目。--mirror所做的只是 (a) 进行裸克隆和 (b) 将默认 fetch refspec 设置为+refs/*:refs/*。 -
我在你的问题中缺少的是你所说的“克隆回来”的意思。你的意思是:原来的repo确实被破坏了,你现在想用镜像来恢复原来的?
-
用
--mirror克隆它。--mirror指示 Git 将所有远程引用复制为本地引用。如果没有镜像选项,远程引用将变为远程引用。 -
@torek 是的,我只是想从镜像的仓库中恢复被破坏的仓库。 @knittl 如果我使用
--mirror,即使我想恢复被破坏的仓库,我也会得到一个没有工作树的裸仓库,所以我无法使用它。 -
我认为使用
clone命令恢复一个裸露的(即镜像的)repo 总是会将引用解析为远程的,即使它们是本地的。然后,您需要检查远程 refs 以便将它们获取到本地或将 'refs/remotes/origin/branch' 修改为 'refs/heads/branch' 到打包的 refs 文件中。是否有一个选项可以阻止clone命令将引用解析为远程引用?