ChatGPT解决这个技术问题 Extra ChatGPT

Git 代理绕过

Git 通过设置 http.proxy 配置参数在代理环境中工作。

对于某些地址,我需要绕过代理。是否有 no-proxy/bypass-proxy 配置参数?

另一种方法是使用 SSH URL(而不是 HTTPS URL)来访问公司防火墙内的 Git 存储库。使用 SSH 与 repo 的任何交互都不会尝试通过代理。

J
Jan Gutvirth

可以基于每个远程覆盖代理 - 请参阅 http://git-scm.com/docs/git-config(查找“http.proxy”和“remote.<name>.proxy”设置)。假设你有一个名为“origin”的遥控器,那么你可以用来绕过这个遥控器的代理的命令是:

git config --add remote.origin.proxy ""

这将编辑工作副本中的 .git/config 文件,这意味着您首先需要克隆存储库,但未设置代理。克隆后,您可以重置代理,运行 Jan 发布的命令,然后能够拉和推,而无需再次担心。
我不工作,它仍然连接到代理但没有凭据。
似乎对于 fetch 工作正常,但对于“push”根本不行,而 no_proxy=.my.domain 的另一个答案对于 push 工作正常。
C
Community

要绕过代理,通常是本地地址,您需要做的就是:

export no_proxy=URLToIgnore

其中 URLToIgnore 是您希望 Git 忽略的 URL。您也可以忽略以某个单词结尾的 URL。

export no_proxy=.mylocal

所有以 .mylocal 结尾的网址都将被忽略。要忽略多个 URL:

export no_proxy=.mylocal URLToIgnore

要使其永久化,请将其添加到您的 ~/username/.bash_profile 文件中。如果在用户根目录中找不到 .bash_profile 文件,请手动创建它。

更多详情:How to temporarily disable git http proxy


这很有用,但没有提到它只对 linux(也许还有 mac)有效,但对 Windows 无效。用户的环境变量对于 git 的工作方式是否与 .bash_profile 相同?
这对我的 iMac 上的 git 不起作用。接受的答案适用于我的 iMac 上的 git。
您可以在 Windows 中执行相同的操作。添加一个值为 URLS_to_Ignore 的环境变量“no_proxy”。不要忘记启动一个新的 CMD shell。或者要在当前 CMD 中工作,只需 set no_proxy=URLS_to_Ignore。 Mac 应该和 *nix 一样工作。不要忘记启动一个新的 shell 终端(或 source ~/.bash_profile,如果添加了更改)。
V
VonC

如果要将配置设置为空值,请确保您拥有 Git 2.1.2+,例如

git config --add remote.origin.proxy ""

因为如果您决定恢复该远程的代理(此处为“origin”)...它会使用早于 2.1.2(2014 年 9 月 30 日)的 Git 出现段错误

请参阅 commit c846664 (tanayabh)

make config --add 对于空值和 NULL 值表现正确

目前,如果我们有一个配置文件,例如,

[foo]
        baz
        bar =

我们尝试类似“git config --add foo.baz roll”,Git 会出现段错误。此外,对于“git config --add foo.bar roll”,它将覆盖原始值,而不是附加到现有的空值之后。问题在于用于模拟 git_config_set_multivar_in_file() 中的 --add 的正则表达式,“^$”,在理想情况下,它不应该与任何字符串匹配,但对于空字符串是正确的。而是使用像“a^”这样的正则表达式,它对于任何字符串都不能为真,无论是否为空。要删除段错误,请在 config.c 中的 matches() 中添加对 NULL 值的检查。


感谢您的详细回复!
G
Ganesh Pendyala

对于 Windows 用户

接受的 answer 要求 git 存储库在工作之前存在,第二好的 answer 仅适用于 linux &苹果电脑。因此,在 Windows 中使其适用于 https://git-url.com/project/repo-name.git 在命令提示符下尝试以下操作

set no_proxy=git-url.com

然后

git clone git-url.com/repo-name.git

现在您将有一个回购应用接受的答案。


O
OriginalHacker

假设您是从克隆开始的,那么 origin-config 的东西就没那么有用了。当我发现自己处于那个位置时,我会这样做。

$> no_proxy=$no_proxy,<git-url|ip> git clone ...

请注意,这将是每个命令。要使刚刚克隆的 repo 永久保存,您现在可以转到新克隆的 repo 并添加 empty-proxy 设置。

$> git config --add remote.origin.proxy ""

但是,如果您希望在所有情况下都将此主机或 IP 从代理中排除,请使用您的 shell 初始化文件为您的用户永久包含您的来源。

我会将以下行放在 .bashrc 中的最后

export no_proxy=$no_proxy,<your repo>

我希望这能让事情更清楚!


R
Riddhi Sanyal

由于 Windows / Unix 用户角色,如果您无法从命令行中删除 http_proxy,请尝试这种方法 -

git config -l --show-origin

这将根据层次结构打印基于文件的配置。现在转到特定文件(本地 .git/config 文件夹文件)并更新/删除 http_proxy。

希望这可以帮助。


d
daniel sp

如果您尝试克隆新的存储库,其他答案中给出的某些解决方案将失败,因为 git 抱怨本地文件夹不包含 git 存储库。

在这种情况下,这对我有用

git config --global --add remote.origin.proxy ""

C
Christo

老问题,但这里是如何全局配置它:

设置代理:

git config --global http.proxy proxy.example.com:3128

通过将其代理设置为空字符串来关闭特定 URL 的代理(将 myserver.localdomain 替换为您的服务器 FQDN):

git config --global http.https://myserver.localdomain.proxy ''

S
Shawn Mehan

只需在命令提示符下执行以下命令

git config --global http.proxy [Proxy IP]:[Proxy port]