首页 > 解决方案 > 从远程 GitHub 存储库替代 git lfs clone 的更快?

问题描述

客观的

我有一个远程GitHub 存储库,它使用 git-lfs 来保存大型二进制文件。

基线方法 ( git lfs clone)

作为测试其他人如何下载我的存储库的测试,我在 Linux 集群上的高性能登录节点(具有 72 个 Intel Xeon CPU)上运行以下命令,使用 gpfs​​ 磁盘,以及这些版本的 git 和 git-lfs。

$ time git lfs clone --progress git@github.com:PackardChan/chk2019-blocking-extreme.git
Cloning into 'chk2019-blocking-extreme'...
remote: Enumerating objects: 138, done.
remote: Counting objects: 100% (138/138), done.
remote: Compressing objects: 100% (114/114), done.
remote: Total 138 (delta 20), reused 138 (delta 20), pack-reused 0
Receiving objects: 100% (138/138), 148.16 MiB | 36.59 MiB/s, done.
Resolving deltas: 100% (20/20), done.
Git LFS: (64 of 64 files) 7.29 GB / 7.29 GB                                                              

real    4m51.156s
user    7m14.044s
sys 0m28.360s

即使在高性能节点中,这也需要将近 5 分钟。我注意到最后一行输出仅在 36 秒内就达到了 7.29GB。其余时间都在运行git update-index -q --refresh --stdin(从我从top -c命令中学到的东西)。

因此,我相信如果可以跳过 update-index,性能可以大大提高。正如《目标》中提到的,如果可以提高速度,我不介意放弃 git 版本控制。

其他不成功的尝试

  1. svn 导出

受这篇文章的启发,我尝试了:

time svn export https://github.com/PackardChan/chk2019-blocking-extreme/trunk z4svn

但是 lfs 文件没有正确下载。这也在这里报道。

  1. git存档

但是,GitHub 不支持 git-archive

  1. --深度=1

我试过了,它并没有表现得更好。这是可以理解的,因为我的存储库只有一个提交。

我对 git 比较陌生。那么,我错过了什么吗?

标签: gitperformancegithubgit-clonegit-lfs

解决方案


我在回答我自己的问题。事实证明,问题是我没有运行git lfs installsetup ~/.gitconfig

git lfs 安装 [选项]

执行以下操作以确保正确设置 Git LFS:

  • 在全局 Git 配置中设置名为“lfs”的清洁和涂抹过滤器。
  • 安装一个 pre-push 钩子来为当前存储库运行 git lfs pre-push,如果从内部运行。如果在任何 Git 配置中配置了“core.hooksPath”(并且支持,即安装的 Git 版本至少为 2.9.0),那么 pre-push 挂钩将安装到该目录。

之后,我又报告了 4 行配置git config --list

filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true

现在相同的命令time git lfs clone --progress git@github.com:PackardChan/chk2019-blocking-extreme.git只需要大约 1 分钟。


推荐阅读