克隆不包含 blob 的 bare 仓库的 Git 操作

8
在我的git仓库中,我使用算法为每个提交分配一个或多个唯一的版本号,基于分支名称和标签。我想将这种机制用于另一个大型仓库,我希望在不传输任何文件的情况下克隆该仓库。
裸clone可以帮助我摆脱工作副本的块,但仍会从服务器下载它们。 使用--depth 1的浅层克隆跳过大多数块,但也跳过除一个之外的所有提交的元数据下载。
是否有类似于git fast-export --no-data的东西,我可以在客户端使用它来获取包含提交元数据和可能的文件名的图形信息,而无需首先克隆存储库?理想情况下,我应该能够像其他(bare,shallow)存储库一样通过git log|show|rev-parse|show-ref访问元数据。(我知道git LFS和git Annex存在并且可以帮助减小某些仓库的大小,但我不能在不更改现有仓库的情况下使用它们。)
2个回答

6

稍后有一个关于这个的想法:截至2017年,包协议现在允许部分克隆,并且有一个可用的--filter=blob:none可以省略所有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宣布支持v2协议及其过滤功能,详见此处,但是如此处所述,这并不适用于-c protocol.version=2



3

有没有类似于 git fast-export --no-data 的东西可以在客户端使用?

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

你需要让你的 repo 由 Git 托管服务(如 GitHub)管理,并提供 API(如 commits API),以便在没有数据的情况下查询元数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接