V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
forcecharlie
V2EX  ›  git

分享一个在 Linux 上编译静态 Git 二进制的项目

  •  
  •   forcecharlie · 6 小时 34 分钟前 · 844 次点击

    去年底(距今也没有多久),发现我为上上家公司写的 Git 构建脚本还在用,于是我花业余时间写了一个新的脚本,用来构建仅依赖 libc 或者静态编译 Git 的项目,现在分享出来:https://github.com/baulk/git-minimal,旨在提供最新版无依赖的 git 二进制。

    Release 可下载 deb/rpm/apk(alpine) 安装包,还有 tar.xz 压缩包(压缩包里有启动器,修正了路径和 SSL 证书,证书下载自 cURL 站点),压缩包(安装包)中还有开启了 HTTP/3 的 cURL 最新版本。

    风味

    包名 libc 可运行的系统
    git-minimal glibc Linux ,x86_64 ,glibc >= 2.39
    git-minimal-static glibc (静态链接) Linux ,x86_64
    git-minimal-musl musl (静态链接) Linux ,x86_64/aarch64

    由于 musl 的内存分配器比较差,git-minimal 在链接阶段链接了 mimalloc 。

    第 1 条附言  ·  6 小时 0 分钟前

    git-minimal 构建时禁用了一些大多数人用不到的功能,构建标志:NO_PYTHON,NO_PREL,NO_TCLTK,NO_GETTEXT;这意味着没有 Git GUI (Tcl Tk),Git SVN 以及一些邮件列表开发流程的能力支持,如果有人需要使用这些功能可以 fork 项目后自己调整,或者说需要这些功能的人大多自己能构建 git。

    12 条回复    2026-01-12 16:15:23 +08:00
    bli22ard
        1
    bli22ard  
       6 小时 32 分钟前
    静态链接 glibc 没问题吗?
    forcecharlie
        2
    forcecharlie  
    OP
       6 小时 13 分钟前
    @bli22ard 验证过暂时没有问题,Git Over HTTP/Git Over Git 没有啥问题。
    Syiize
        3
    Syiize  
       6 小时 12 分钟前 via Android
    好东西啊,我现在经常接触老古董服务器,没有 root 想装个新一点的 git 巨难搞
    bli22ard
        4
    bli22ard  
       5 小时 58 分钟前
    @forcecharlie #2 感觉没必要静态 glibc ,要全静态 musl 就好了, 静态链接 glibc ,引入了潜在问题,但是没多少好处
    forcecharlie
        5
    forcecharlie  
    OP
       5 小时 48 分钟前
    @bli22ard 静态链接 glibc 是一个尝试,这个项目里面有静态链接 musl ,但实践过程发现 musl 性能还是太差了,一个是 malloc (这里连接了 mimalloc ),还有一些 SIMD 优化,这个暂时就没有办法了。
    snowsnow
        6
    snowsnow  
       5 小时 47 分钟前
    感谢,希望有一个 Github Action 能自动跟踪 Git 的发版 + 出包~
    hellojukay
        7
    hellojukay  
       4 小时 28 分钟前
    很好,已点赞,方便 embed 到项目里面。
    body007
        8
    body007  
       4 小时 14 分钟前
    我之前弄静态编译后只能操作 git://xxx ,而 https://xxx 一直没搞好。最后只能妥协用下面这个 docker 了。

    alias git='docker run -ti --rm -u$(id -u):$(id -g) -e HOME=${HOME} -v /etc/passwd:/etc/passwd -v /etc/group:/etc/group -v ${HOME}:${HOME} -v $(pwd):/git alpine/git'
    forcecharlie
        9
    forcecharlie  
    OP
       3 小时 40 分钟前
    @body007 这个和 git 依赖 cURL 有关,configure 阶段可能会禁用 CURL ,以及 CA 证书,git-minimal 解决了一些列问题,还提供了 tar.xz 可以解压后运行(通常因 RUNTIME_PREFIX 实现缺陷的原因导致 git 不能解压到任意位置运行,但这个项目中我写了一个启动器解决了这个问题。)
    zy410692
        10
    zy410692  
       56 分钟前
    这么牛吗?
    hronro
        11
    hronro  
       25 分钟前
    我记得 glibc 的文档里明确说了他不能被静态链接,否则会有 UB 。
    yougg
        12
    yougg  
       8 分钟前
    纯静态的 git 命令程序或许你可以试试: https://github.com/go-git/go-git
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5356 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 08:24 · PVG 16:24 · LAX 00:24 · JFK 03:24
    ♥ Do have faith in what you're doing.