5

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

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

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

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

4

2 回答 2

3

我可以在客户端使用 git fast-export --no-data 之类的东西吗?

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

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

于 2016-12-20T05:22:32.350 回答
2

一段时间后的另一个想法:截至 2017 年,pack-protocol 现在允许部分克隆,并且有一个省略所有 blob 的--filter=blob:none可用- 这在服务器端应该足够了。

遗憾的是,鉴于当前的服务器端实现,这并不像人们希望的那样工作:

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,正如GitHub 和 GitLab 是否支持 git clone 的 --filter 参数?

于 2019-09-11T20:51:09.093 回答