phi*_*010 5 git metadata git-clone git-fast-import git-plumbing
在我的 git 存储库中,我使用一种算法根据分支名称和标签为每个提交分配一个或多个唯一的版本号。我想将此机制与另一个大型存储库一起使用,我想在不传输任何文件的情况下克隆它。
裸克隆帮助我摆脱了 blob 的工作副本,但它仍然从服务器下载它们。具有--depth 1跳过大多数 blob 的浅克隆,但也跳过下载除一个之外的所有提交的元数据。
git fast-export --no-data我可以在客户端使用类似的东西来获取包含提交元数据和文件名的图形信息,而无需先从我的服务器克隆存储库?理想情况下,我可以像通过git log|show|rev-parse|show-ref.
(我知道 git LFS 和 git Annex 存在并且可以帮助减少某些存储库的大小,但是我不能在不更改现有存储库的情况下使用它们。)
稍后的另一个想法:截至 2017 年,pack-protocol 现在允许部分克隆,并且有一个--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.
[...]
Run Code Online (Sandbox Code Playgroud)
Github 甚至宣布支持 v2 协议及其过滤功能,但这两者都不起作用-c protocol.version=2,正如Do GitHub and GitLab support git clone's --filter parameter?上所述。
有没有像 git fast-export --no-data 这样的东西我可以在客户端使用?
否:在旁边git ls-remote(仅获取远程存储库头部的元数据)之外,其他任何内容都将获取完整的存储库历史记录。
您需要由 Git 托管服务(例如 GitHub)管理您的存储库,提供 API(例如commits API),以便在没有数据的情况下查询元数据。
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |