去年底(距今也没有多久),发现我为上上家公司写的 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 。
git-minimal 构建时禁用了一些大多数人用不到的功能,构建标志:NO_PYTHON,NO_PREL,NO_TCLTK,NO_GETTEXT;这意味着没有 Git GUI (Tcl Tk),Git SVN 以及一些邮件列表开发流程的能力支持,如果有人需要使用这些功能可以 fork 项目后自己调整,或者说需要这些功能的人大多自己能构建 git。
1
bli22ard 6 小时 32 分钟前
静态链接 glibc 没问题吗?
|
2
forcecharlie OP @bli22ard 验证过暂时没有问题,Git Over HTTP/Git Over Git 没有啥问题。
|
3
Syiize 6 小时 12 分钟前 via Android
好东西啊,我现在经常接触老古董服务器,没有 root 想装个新一点的 git 巨难搞
|
4
bli22ard 5 小时 58 分钟前
@forcecharlie #2 感觉没必要静态 glibc ,要全静态 musl 就好了, 静态链接 glibc ,引入了潜在问题,但是没多少好处
|
5
forcecharlie OP @bli22ard 静态链接 glibc 是一个尝试,这个项目里面有静态链接 musl ,但实践过程发现 musl 性能还是太差了,一个是 malloc (这里连接了 mimalloc ),还有一些 SIMD 优化,这个暂时就没有办法了。
|
6
snowsnow 5 小时 47 分钟前
感谢,希望有一个 Github Action 能自动跟踪 Git 的发版 + 出包~
|
7
hellojukay 4 小时 28 分钟前
很好,已点赞,方便 embed 到项目里面。
|
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' |
9
forcecharlie OP @body007 这个和 git 依赖 cURL 有关,configure 阶段可能会禁用 CURL ,以及 CA 证书,git-minimal 解决了一些列问题,还提供了 tar.xz 可以解压后运行(通常因 RUNTIME_PREFIX 实现缺陷的原因导致 git 不能解压到任意位置运行,但这个项目中我写了一个启动器解决了这个问题。)
|
10
zy410692 56 分钟前
这么牛吗?
|
11
hronro 25 分钟前
我记得 glibc 的文档里明确说了他不能被静态链接,否则会有 UB 。
|
12
yougg 8 分钟前
纯静态的 git 命令程序或许你可以试试: https://github.com/go-git/go-git
|