【问题标题】:Extract meta information from Git, allow git log without fetching full repo从 Git 中提取元信息,允许 git log 而不获取完整的 repo
【发布时间】:2019-02-18 04:16:25
【问题描述】:

在部署中使用 Git 时,通常需要了解提交历史和关系。当 repo 较小时,没有问题。但是对于大型存储库要获得完整的历史记录,需要获取所有对象。此操作会占用大量带宽并花费大量时间。

那么,问题来了:

需要在不获取内容的情况下处理大型 Git 存储库的历史记录。

如果能够获取几 MB 并在无法签出内容的情况下使用 git loggit rev-parsegit rev-list 等,那就太好了。

想法1。具有来自 git log 的原始输出的专用分支 _metainfo

git log 的输出存储到专用分支。 但是这种方法需要自己的解析器。
这适用于非常简单的任务。

想法2。修剪文件内容

git filter-branch tree-filter "echo >**"(伪代码)。这将更改提交的哈希,但存储提交消息和日期。并且可以将旧的提交哈希添加到过滤的提交消息中。

更新
谢谢你的回答。我已经阅读了可能的重复并了解:“目前没有解决方案”。在这项研究中,我将我的第一个想法实现为一个简单的解决方法,并将第二个想法实现为一个工作解决方案的概念。它们都给出了半可用的结果。如果社区感兴趣,我会美化并发布它们。

【问题讨论】:

标签: git git-log git-filter-branch


【解决方案1】:

您要查找的内容今天不可用。你可以按照你的建议做一些事情,但是 Git 作者正在研究一种不同的方法。 Git 2.19 有一些构建块:promisor packs 提供了记录某些对象存在的能力,并且可以通过网络从某个提供者处获得,但实际上并未存储在当前Git 存储库。

一个包含提交对象但只有所有文件对象的承诺的存储库将能够git log(没有-p)。获取部分或全部承诺的树和 blob 对象将启用 -p 和其他附加操作。一旦所有的承诺都实现了,你就有了一个正常的存储库。

然而,即使是 Git 2.19 也没有完成这项工作所需的所有代码。它只有承诺的概念。请参阅this GitHub blog entry(链接直接指向“部分克隆”工作)或Git source technical design notes

【讨论】:

  • 你能添加一个链接来讨论这个功能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 2015-01-10
  • 2015-09-19
  • 2017-09-16
相关资源
最近更新 更多