git - 从远程 GitHub 存储库替代 git lfs clone 的更快?
问题描述
客观的
我有一个远程GitHub 存储库,它使用 git-lfs 来保存大型二进制文件。
- 我希望其他人能够快速下载我的代码和数据。
- 如果可以提高速度,我不希望其他人必须使用 git 对他们的存储库副本进行版本控制。
- 最好是我想知道慢或快的原因。
基线方法 ( git lfs clone
)
作为测试其他人如何下载我的存储库的测试,我在 Linux 集群上的高性能登录节点(具有 72 个 Intel Xeon CPU)上运行以下命令,使用 gpfs 磁盘,以及这些版本的 git 和 git-lfs。
- git 版本 2.10.2
- git-lfs/2.3.4(GitHub;linux amd64;去 1.9.1;git d2f6752f)
$ 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 版本控制。
其他不成功的尝试
- svn 导出
受这篇文章的启发,我尝试了:
time svn export https://github.com/PackardChan/chk2019-blocking-extreme/trunk z4svn
但是 lfs 文件没有正确下载。这也在这里报道。
- git存档
- --深度=1
我试过了,它并没有表现得更好。这是可以理解的,因为我的存储库只有一个提交。
我对 git 比较陌生。那么,我错过了什么吗?
解决方案
我在回答我自己的问题。事实证明,问题是我没有运行git lfs install
setup ~/.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 分钟。
推荐阅读
- android - ViewModel 如何捕获上层未抛出的异常?
- javascript - 使用 jquery ajax 和表单数据将视频上传到数据库
- javascript - Typescript,AJAX中的Jquery:未定义导出
- json - JSON反序列化,我需要将子部分作为单个字符串返回
- docker - Java - HttpsURLConnection 是否适用于 Docker 容器?
- php - Laravel 登录后重定向
- git - 执行 git 命令 git pull --allow-unrelated-histories 后无法退出打开的文件
- javascript - urql useQuery 的暂停选项不会暂时冻结请求
- javascript - 交换图像文件并将css类添加到使用JS滚动时的img标签
- python - 如何在Python中找到给定日期期间每个季度的最后一天?