本地构建的 Git 安装无法连接到远程存储库 - 缺少远程 https

本地构建的 Git 安装无法连接到远程存储库 - 缺少远程 https

我正在尝试让 Git 在一个古老的 Gentoo Linux 机器上工作,但我没有 root/提升权限。我想我应该能够在我的 ~/bin 文件夹中本地构建和安装 Git,虽然我可以做到这一点并且它有效,但我无法连接到远程 HTTPS 存储库(这是必不可少的,我不能使用其他 Git 远程协议)。

到目前为止,我的构建过程通过在线找到的各种指南和提示进行了存档:将 ~/bin 添加到我的 PATH 的开头。

下载并构建 CURL 8.4.0 - 我假设 Git 需要 CURL 作为 HTTP 访问部分,而且如果最初无法找到 curl/curl.h,Git 构建将无法完成......

cd ~/src/curl-8.4.0
./configure --prefix=$HOME --with-openssl
make
make install

Curl 现在位于 ~/bin 中并正在工作 - 我可以从 HTTPS 源中提取数据。

进一步阅读表明我需要 Expat - 所以我也获取了该源代码并构建了:

cd ~/src/expat-2.5.0
./configure --prefix=$HOME
make
make install

最后是 Git 2.42.1 版本:

cd ~/src/git-2.42.1
make clean
make configure
./configure -prefix=$HOME -with-curl=~/bin CFLAGS="$CFLAGS -std=gnu99" --with-expat=~/bin
make
make install

Git 现已安装并且主要在 ~/bin 中工作,除了当我尝试将新创建的本地存储库推送到服务器时:

$ git push -u origin master
git: 'remote-https' is not a git command. See 'git --help'.

所以我错过了远程https - 但我无法弄清楚为什么会错过这个:我认为它在某个地方悄然失败,而不是给我一个关于在构建过程中找不到什么的错误?

更新 我对此进行了更多故障排除,发现配置脚本的输出显示 Curl 未包含在 Git 构建中(我认为这是在 Git 中提供此功能所必需的): checking for curl_global_init in -lcurl... no

然后再挖得更深一些配置日志由 Git 的配置脚本创建的文件。看来 Curl 库的测试失败了:

configure:5237: checking for curl_global_init in -lcurl
configure:5262: gcc -o conftest  -std=gnu99 -I~/include  -L~/lib  conftest.c -lcurl   >&5
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lcurl
collect2: ld returned 1 exit status
configure:5262: $? = 1

这部分我仍然不确定 - ~/include 中是一个 Curl 目录,其中包含 Curl 构建的标头,而 ~/lib 中是 libcurl 库:libcurl.so 和 libcurl.so4。那么为什么在 Git 配置脚本中无法查看/使用这些库,我可能没有正确构建它们吗?

答案1

问题似乎在于 Git 的配置脚本只会尝试在默认系统位置查找 Curl 库和标头,而不是我之前的本地安装将它们放入的位置。通过编译器和库标志选项手动添加这些位置是修复:(CPPFLAGS="$CPPFLAGS -I/home/username/include" LDFLAGS="$LDFLAGS -L/home/username/lib"奇怪的是,在这些选项的路径中使用 ~ 简写被忽略。)

有关可传递给 Git 配置脚本的选项的更多信息可以通过运行找到./configure --help,这是我找到上述标志和选项的地方。

更新后的最终工作 Git 构建步骤如下:

cd ~/src/git-2.42.1
make clean
make configure
./configure -prefix=$HOME --with-curl=$HOME CFLAGS="$CFLAGS -std=gnu99" CPPFLAGS="$CPPFLAGS -I/home/username/include" LDFLAGS="$LDFLAGS -L/home/username/lib"
make
make install

但仍然存在一个难题:如果我必须通过这一额外步骤传递头文件和库的位置,那么该选项在--with-curl=$HOME做什么?

相关内容