Git 克隆没有 blob 的裸仓库

Git clone bare repo without blobs

在我的 git 存储库中,我使用一种算法根据分支名称和标签为每个提交分配一个或多个唯一版本号。我想将此机制与另一个大型存储库一起使用,我想在不传输任何文件的情况下进行克隆。

裸克隆帮助我摆脱了 blob 的工作副本,但它仍然从服务器下载它们。 --depth 1 的浅克隆会跳过大多数 blob,但也会跳过下载除一个提交之外的所有提交的元数据。

是否有类似 git fast-export --no-data 的东西,我可以在客户端使用它来获取包含提交元数据和文件名的图形信息,而无需首先从我的服务器克隆存储库?理想情况下,我可以通过 git log|show|rev-parse|show-ref.

像访问任何其他(裸的、浅的)存储库一样访问元数据

(我知道 git LFS 和 git Annex 存在并且可以帮助减少一些存储库的大小,但我不能在不更改现有存储库的情况下使用它们。)

Is there something like git fast-export --no-data which I can use on the client-side?

否:除了 git ls-remote(仅获取远程仓库头部的元数据)之外,其他任何东西都将获得完整的仓库历史记录。

您需要由 Git 托管服务管理的存储库,例如 GitHub,提供 API(例如 commits API),以便查询没有数据的元数据。

一段时间后的另一个想法:截至 2017 年,pack-protocol 现在允许 partial clones, and there is a --filter=blob:none available 省略所有 blob——这在服务器端应该足够了。

考虑到当前的服务器端实现,遗憾的是,这并不像人们希望的那样有效:

C:\Users\phi1010>git clone https://github.com/torvalds/linux.git --filter=blob:none
Cloning into 'linux'...
warning: filtering not recognized by server, ignoring
remote: Enumerating objects: 6876195, done.
[...]

Github甚至宣布support of the v2 protocol and its filtering capabilities, but this neither works with -c protocol.version=2, as also stated on