5

我一直在尝试在 heroku 上引入一些经过身份验证的 git repos,并遇到了一些问题。

理想情况下,我希望能够在此处使用令牌解决方案, 或者如果令牌解决方案不是,则git pull https://<token>@github.com/username/bar.git甚至可以接受解决方案。git pull https://username:password@github.com/username/bar.git

但是,似乎 heroku 版本的 git (v1.7.0) 与 https 身份验证的克隆作斗争:

$ heroku run bash
$ git --version
git version 1.7.0
$ git clone https://username:password@github.com/username/bar.git
Initialized empty Git repository in /app/bevry-website/.git/
error: The requested URL returned error: 401 while accessing https://username:password@github.com/username/bar.git/info/refs
fatal: HTTP request failed

在 heroku 实例上安装较新版本的 git (v1.7.12) 并使用它可以正常工作:

$ heroku run bash
$ curl --silent --location http://git-core.googlecode.com/files/git-1.7.12.tar.gz | tar xz; cd git-1.7.12; make NO_TCLTK=YesPlease NO_PERL=YesPlease NO_GETTEXT=YesPlease NO_SVN_TESTS=YesPlease NO_MSGFMT=YesPlease NO_MSGFMT_EXTENDED_OPTIONS=YesPlease prefix=$HOME install; cd ..; rm -Rf git-1.7.12
$ ./bin/git --version
git version 1.7.12
$ ./bin/git clone https://username:password@github.com/username/bar.git
works fine :)

但是,在实例上安装我们自己的 git 版本并不理想,因为编译和安装需要很长时间。

似乎 heroku 不提供任何免费支持,这很不幸,因为我只需要告诉他们升级他们的 git 版本,一切都很好。但是,由于这是不可能的,是否有人对在 heroku 上进行经过身份验证的 https git 克隆有任何建议?(我已经设法通过.ssh使用 repo 上传一个特殊目录来获得经过身份验证的 ssh,但这对于我们的情况并不理想,因为我们更愿意只使用 https 和令牌)。

4

2 回答 2

4

如果 git 版本确实是 1.7.0,那么它就太旧了,因为从那时起已经对 http 传输机制进行了多次修复。
(如 1.11.7:如果服务器配置为允许匿名 GET,同时要求对 POST 进行身份验证,则使用最近的 Git 推送到智能 HTTP 服务器会失败,但 URL 中没有用户名来强制身份验证。)

Plus 1.7.8 引入了一种缓存凭证的方法:

git push处理“ ”和“ ”中使用的 HTTP 事务的用户名/密码的代码git fetch学会了将“凭据 API”与外部程序对话以缓存或存储它们,以允许与平台本机钥匙串机制集成。

您的 ssh 解决方法是一种方法,另一种方法是重新编译 git,但是在 heroku 升级其默认 git 之前,我看不到另一种方法可以通过 https 安全地对 Heroku git repos 进行身份验证。

于 2012-10-19T06:33:39.997 回答
2

我刚刚遇到了完全相同的问题:

$ git clone https://username:password@github.com/username/bar.git
Initialized empty Git repository in /app/bevry-website/.git/
error: The requested URL returned error: 401 while accessing https://username:password@github.com/username/bar.git/info/refs
fatal: HTTP request failed

我使用电子邮件作为 Github 的用户名。Heroku 的 git(1.7 版)不支持此功能。

git clone https://username:password@github.com/username/bar.git

如果您使用实际的 Github 用户名而不是您的电子邮件,它会起作用。

电子邮件在较新的 Git 版本中用作用户名。

于 2012-11-01T08:28:16.130 回答