windows - git config pack.packSizeLimit 的上限?

标签 windows git

将配置放入 1.9.4.msysgit.2 后:

git config --global pack.packsizelimit 5g

我收到这样的错误:

$ git log
fatal: bad numeric config value '5g' for 'pack.packsizelimit' in c:/Users/Danny/.gitconfig: out of range

经过多次测试,我发现该值不能超过4GB。即接受“3g”、“4095m”、“4194303k”,而拒绝“4g”、“4096m”、“4194304k”。

但是文档说 pack.packsizelimit 的默认值是无限制的,4GB 限制似乎没有道理。

有人知道 pack.packsizelimit 是否有与其他配置相关的上限吗?或者这是一个硬编码的上限?或者我的git版本有问题?

最佳答案

在git源代码中:

$ git grep -C 2 packsizelimit

[片段]

config.c:       if (!strcmp(var, "pack.packsizelimit")) {
config.c-               pack_size_limit_cfg = git_config_ulong(var, value);

[和]

fast-import.c:  if (!strcmp(k, "pack.packsizelimit")) {
fast-import.c-          max_packsize = git_config_ulong(k, v);

因此该限制是由 git_config_ulong 强制执行的;下一个问题是:应该这样吗?

此实例必须是:

cache.h:extern unsigned long pack_size_limit_cfg;

但是这个:

fast-import.c:static off_t max_packsize;

具有类型off_t,通常为1 64 位。包文件格式本身怎么样?这里的答案比较模糊,但是the Git Book says :

Version 2 indexes can also handle packfiles larger than 4 Gb.

包文件本身中的项目具有可变长度(本质上可能是无限多位长)。所以这些都可以,只要索引是版本2就可以了。

因此,如果 off_t 是 64 位,并且如果 cache.h 被修改,那么这里允许 64 位就可以了。但是,此类文件可能无法在 32 位限制的系统上使用。或者,git 可以使用 int64_tgit_config_int64 (这种类型和这个例程已经存在于 git 中),尽管我不清楚这需要多少工作以及如何进行与 git 内部的其余部分交互。

这里还值得注意的是,git_config_ulong 根据编译 git 的系统上 unsigned long 的大小强制执行限制,因此这意味着您的系统有32位(或者至少支持32位长模型,你的git是在该模型下编译的)。


1我不确定哪些系统(如果有)仍然具有 32 位 off_t。我知道 Linux 首先开始通过 off_t(32 位)与 loff_t(64 位)支持 64 位文件大小,但目前 off_t__kernel_off_t 的别名,它是 arch/x86/include/uapi/asm/posix_types_x32.hlong long 的别名,或者是include/uapi/asm-generic/posix_types.h 中的 long。因此,它在至少一个 32 位系统上是 64 位,在具有 64 位 long 的系统上是 64 位,但在具有 32 位 long 的系统上可能是 32 位code>s,如果它们不使用 long long 变体。

早在 20 世纪 90 年代,各种 BSD 就直接转向 64 位。

SunOS/Solaris 在相当长一段时间内仍然保留 32 位 off_t;我不确定目前的情况。

关于windows - git config pack.packSizeLimit 的上限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191985/

相关文章:

java.io.IOException : The pipe is being closed is thrown on Windows but works fine on Linux 异常

git - 如何从 git 图形颜色中排除颜色?

git - 与使用 Github 的人共享一个 git repo 分支的好方法是什么?

git - 从 GitHub 下载非常慢

android - 静默安装 Android Studio?

windows - 通过jenkins访问windows上的linux挂载位置

c - 在不使用广播的情况下一次从 UDP 服务器向所有客户端发送相同的信息

git - 如何删除远程git钩子(Hook)?

git - 将项目迁移到 Git/Gerrit。访问控制问题?

windows - `gitk` 使用`where`命令找到程序但无法执行?