没有blob的Git克隆裸仓库

时间:2016-12-19 22:30:44

标签: git metadata git-clone git-plumbing git-fast-import

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

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

我是否可以在客户端使用git fast-export --no-data来获取包含提交元数据和文件名的图形信息,而无需先从我的服务器克隆存储库?理想情况下,我可以通过git log|show|rev-parse|show-ref访问元数据,就像任何其他(裸露的,浅的)回购一样。

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

2 个答案:

答案 0 :(得分:1)

  

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

否:在git ls-remote旁边(只获取远程仓库头部的元数据),其他任何东西都可以获得完整的回购历史记录。

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

答案 1 :(得分:1)

此后的另一个想法是:从2017年开始,打包协议现在允许partial clonesthere is a --filter=blob:none available忽略所有斑点-在服务器端应该足够了。 / p>

遗憾的是,考虑到当前的服务器端实现,这种方法无法像人们希望的那样发挥作用:

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,但这对-c protocol.version=2都不起作用,正如Do GitHub and GitLab support git clone's --filter parameter?

所述