跳过正文
Background Image
  1. Posts/

通过解除文件资源限制:解决在 AIX 使用 Git 下载大容量仓库失败问题

·482 字·1 分钟· ·
沈显鹏
作者
沈显鹏

最近使用 AIX 7.1 从 Bitbucket 下载代码的时候遇到了这个错误:

fatal: write error: A file cannot be larger than the value set by ulimit.

$ git clone -b dev https://<username>:<password>@git.company.com/scm/vmcc/opensrc.git --depth 1
Cloning into 'opensrc'...
remote: Counting objects: 2390, done.
remote: Compressing objects: 100% (1546/1546), done.
fatal: write error: A file cannot be larger than the value set by ulimit.
fatal: index-pack failed

在 AIX 7.3 我遇到的是这个错误:

fatal: fetch-pack: invalid index-pack output

$ git clone -b dev https://<username>:<password>@git.company.com/scm/vmcc/opensrc.git --depth 1
Cloning into 'opensrc'...
remote: Counting objects: 2390, done.
remote: Compressing objects: 100% (1546/1546), done.
fatal: write error: File too large68), 1012.13 MiB | 15.38 MiB/s
fatal: fetch-pack: invalid index-pack output

这是由于这个仓库里的文件太大,超过了 AIX 对于用户文件资源使用的上限。

通过 ulimit -a 可以来查看。更多关于 ulimit 命令的使用 ulimit Command

$ ulimit -a
time(seconds)        unlimited
file(blocks)         2097151
data(kbytes)         unlimited
stack(kbytes)        32768
memory(kbytes)       32768
coredump(blocks)     2097151
nofiles(descriptors) 2000
threads(per process) unlimited
processes(per user)  unlimited

可以看到 file 有一个上限值 2097151。如果将它也改成 unlimited 应该就好了。

通过 root 用户可以访问到 limits 文件 /etc/security/limits(普通用户没权限访问)。

# 以下是这个文件里的部分内容

default:
        fsize = 2097151
        core = 2097151
        cpu = -1
        data = -1
        rss = 65536
        stack = 65536
        nofiles = 2000

将上述的值 fsize = 2097151 改成 fsize = -1 就将解除了文件块大小的限制了。修改完成后,重新登录来让这次修改生效。

再次执行 ulimit -a,已经生效了。

$ ulimit -a
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        32768
memory(kbytes)       32768
coredump(blocks)     2097151
nofiles(descriptors) 2000
threads(per process) unlimited
processes(per user)  unlimited

此时 file(blocks) 已经变成 unlimited 了。再次尝试 git clone

git clone -b dev https://<username>:<password>@git.company.com/scm/vmcc/opensrc.git --depth 1
Cloning into 'opensrc'...
remote: Counting objects: 2390, done.
remote: Compressing objects: 100% (1546/1546), done.
remote: Total 2390 (delta 763), reused 2369 (delta 763)
Receiving objects: 100% (2390/2390), 3.80 GiB | 3.92 MiB/s, done.
Resolving deltas: 100% (763/763), done.
Checking out files: 100% (3065/3065), done.

这次就成功了!

相关文章

Error: Permission denied (publickey)
·276 字·1 分钟
本文介绍了如何在配置多个 SSH Git Key 时解决 “Permission denied (publickey)” 错误,确保 GitHub 和 Bitbucket 的 SSH 连接正常工作。
Git 常见设置指北
·773 字·2 分钟
本文介绍了在使用 Git 提交代码之前需要进行的一些常见设置,包括配置用户名和邮箱、处理换行符、编写规范的提交信息等,帮助开发者更好地管理代码版本。
建议在 Bitbucket/GitHub 中启用的仓库设置
·599 字·2 分钟
列出 Bitbucket 和 GitHub 仓库推荐启用的设置,包括禁止强制推送、分支保护、标签管理、合并检查以及提交信息规范等。
启用与禁用 Git sparse-checkout
·244 字·1 分钟
介绍如何启用与禁用 Git sparse-checkout,包括配置只检出指定目录的示例,以及如何恢复到完整检出状态。
程序员自我修养之Git提交信息和分支创建规范
·2408 字·5 分钟
本文介绍了如何制定和实施 Git 提交信息和分支创建规范,以提高代码质量和团队协作效率。
如何给你的 Git 仓库“瘦身”
·2239 字·5 分钟
如何从 Git 仓库中删除不需要的文件和历史记录,以减少仓库的大小,并提供了两种方法:使用 BFG Repo Cleaner 或 git filter-branch。