共享完整的 git 存储库

Share full git repository

bundleunbundle 存储库上有很多主题,但我找不到恢复它的方法使用 reflog

git bundle create mybundle --all

现在 git clone mybundle 清除 reflog 并且 git init && git bundle unbundle mybundle 什么都不做?

有人可以解释为什么 unbundle 命令似乎没有效果吗?除了复制 .git 目录之外,pack/unpack 使用 reflog 完整存储库的最佳方法是什么?

捆绑包,由 git bundle 读取和写入,分两步而不是一步实现 git fetch 协议。这允许您执行操作,即使两个存储库之间没有可用的网络连接。例如,假设您在实验室中有计算机 A,而计算机 B 在山顶上运行 telescope,但那里还没有 Internet。你想为计算机 B 带来软件更新,所以你在实验室的计算机 A 上构建了一个“捆绑包”,将其写入 USB 密钥或其他任何东西,开车上山,并用它来更新计算机 B。

如果你确实有可用的网络,你会开车上山(或只是远程登录)并运行git fetch在电脑上B. 这 不会从计算机 A 复制 reflogs。 Git 存储库的 reflogs 特定于该存储库 ,并且那里这里有两个独立的存储库:计算机 A 上的一个存储 他们的 引用日志,计算机 B 上的一个存储他们的(不同的)引用日志。

由于 git bundle 正在复制 git fetch 所做的事情,因此这不会按设计更新引用日志。

git bundle unbundle mybundle does... nothing?

它运行s git index-pack。这不是供人类使用的:它用于 git fetch 到 运行。

what is the best way [to copy] a reflog ...

reflog 用于在本地存储库上运行的命令,并由其维护。复制整个 .git 目录会复制整个存储库,包括 reflog,这是执行此操作的唯一“普通用户”方式。您 可以 使用 git reflog show 转储存储库 A 上的现有引用日志,然后使用一系列 git update-ref 命令在存储库 B 上添加新条目,但是这些会是具有新日期的新条目,而不是现有条目的副本。

简而言之,存储库 不适合共享。 提交 旨在共享,而不是包含它们的存储库:每个存储库都是私有的。