VS 2015 + Bower:在防火墙后不起作用

VS 2015 + Bower: Does not work behind firewall

问题

在 Visual Studio 2015 年,使用 Bower,我的包在防火墙后恢复失败,错误类似于:

ECMDERR Failed to execute "git ls-remote --tags --heads git://github.com/jzaefferer/jquery-validation.git", exit code of #-532462766

我更新了 git 配置以使用 http 而不是 git。当我从命令行 运行 时,命令成功:

但是 Visual Studio 或其组件之一似乎使用 git 而不是 http 无论如何。

背景和第一次尝试解决

使用 Visual Studio 2015 和 Bower 进行包管理。不在防火墙后面时效果很好,但在防火墙后面时我无法使用 git:// 协议。

解决方案——记录在 SO (example) 的许多其他地方,是 运行:

git config --global url."http://".insteadOf git://

我这样做了,现在我的 git config -l 看起来像:

ore.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=Sean Killeen
user.email=SeanKilleen@gmail.com
url.http://.insteadof=git://

但是尽管如此,Visual Studio / npm 不符合我的配置,或者正在使用它的旧缓存版本。

第二次尝试解决

根据 this thread on npm issue,我看到 npm(大概是 Bower 在 VS 中使用的)使用 git@ 语法。尽管这不是我在输出中看到的,但我还是想试一试。

我运行:

git config --global url."https://github.com/".insteadOf git@github.com:

然后我重新启动了 Visual Studio,但问题仍然存在。我读到的修复可能永远不适用。

关于如何解决的任何想法?

我遇到了同样的问题。显然 VS2015 CTP 附带的 Git.exe 不使用 .gitconfig。但是如果你在其他地方安装了 git 命令行工具,你可以(手动)修复它。

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External 中,您需要编辑文件 bower.cmd

注释掉第 4 行和第 5 行:

rem -- set GIT_PATH=%~dp0\git
rem -- set PATH=%GIT_PATH%;%PATH%`

这将触发使用您已安装的 Git 的命令,它将选择本地 .gitconfig.

确保您设置了适当的 git 设置:

git config --global url."http://".insteadOf git://

我在 Visual Studio 2015 RC(不是 CTP)中遇到了同样的问题。由于这是我在任何地方找到的唯一相关线程,我想我会在此处添加我的 2c。

扩展@MagicMau 的回答,bower.cmd 中引用的行在 2015 RC 中不存在,所以我采用了不同的方法并设置了 PATH 环境变量,这样我的整个 bower.cmd文件现在看起来像这样:

set PATH=C:\Program Files (x86)\Git\bin\;%PATH%
@"%~dp0\node\node" "%~dp0\bower\node_modules\bower\bin\bower" %*

注意第一行是我添加的内容,第二行是已有的内容。

我第一次这样做时,Visual Studio 在包恢复过程中崩溃了,但似乎在重新启动 VS 后可以正常工作。

我在 Visual Studio 2015 RC(不是 CTP)中遇到了同样的问题并得到解决。

2015 RC 中的 bower.cmd 不能正常工作,所以我需要在我的 VS 中禁用它并使用我 PC 上安装的官方版本。很容易做到这一点,只需右键单击项目中的 "Bower" 文件夹和 select "configure external tools",然后取消选中“$(DevEnvDir)\Extensions\Microsoft\Web Tools\External\git”部分。

您可能还需要更改“.bowerrc”文件,以使 GIT 在适合您的项目的正确路径中工作。

执行此操作后,一切正常。

同样的问题使用 VS 2015,我的解决方法:

  1. 安装Git

    http://git-scm.com/

  2. 配置 Git 使用 http 而不是 git:// 和 Git Bash

    git 配置 --global url."http://".insteadOf git://

    编辑(如 g.pickardou 所指)您可以使用 https 来提高安全性:

    git 配置 --global url."https://".insteadOf git://

  3. 配置 VS 使用新安装的 Git 而不是 VS Git

    右击 Bower 文件夹(在 Dependencies 下),然后 select "Configure external tools"

    取消选中“$(DevEnvDir)\Extensions\Microsoft\Web Tools\External\git”

    添加新节点"C:\Program Files (x86)\Git\bin"

希望这会对某人有所帮助,

罗杰里奥

适用于我的 VS2015 版本的解决方案是:

  1. 安装git命令行工具。
  2. 修改文件C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\bower.cmd 内容如下:

    set PATH=C:\Program Files (x86)\Git\bin\;%PATH%
    git config --global url."http://".insteadOf git://
    git config -l
    @"%~dp0\node\node" "%~dp0\bower\node_modules\bower\bin\bower" %*
    

Microsoft 版本的 git 安装(至少与 VS2015 Update 1 一起使用) 支持 .gitconfig 文件,但工具默认情况下安装不会为您提供操作它的方法(就像使用 git 配置来解决问题的所有其他答案一样)。

要在不进行任何额外安装的情况下解决问题,只需在 C:\Users\YourUserName 中创建一个 .gitconfig 文件并将此内容放入其中(即 git config --global 可以,但是因为你没有可以更改配置的 git.exe,你不能在不安装其他你不需要的东西的情况下使用它)


    [url "https://github.com/"]
        insteadOf = git@github.com:
    [url "https://"]
        insteadOf = git://

如果您有一个友好的防火墙管理员,通过定义以下 firewall-policy:

让他允许访问外部 git 存储库

TCP 9418(不需要 UDP)

运行 来自命令行的 VS 的 Bower 映射的主文件夹

@Rogerio Soares 的回答很好,我想很多人会觉得它很有用(包括我自己)。

也就是说,在工作中,我可以安装的工具非常非常有限(这意味着我不能在没有得到很多人的许可的情况下安装另一个版本的 Bower),而且我的主目录被映射到一个根据政策,网络份额为 z:\。每次我发出 git config --global 来配置 git 时,配置设置都会放在 z:\.gitconfig 中。使用成熟的 Git SCM 可以很好地支持此配置文件。然而,显然,libgit2sharp(由嵌入 Visual Studio 2015 的 Git 版本使用)需要此文件位于 c:\username\.gitconfig.

所以在将我的 .gitconfig 文件从 z:\ 复制到 c:\username\ 之后,我能够直接从 运行 Visual Studio 的 bower 版本命令行。

使用 VS 2015,更新 2:只需安装 Git

http://git-scm.com/

绝对有效的最简单答案就在这里。这个问题让我很头疼。 只需下载 git 并安装即可。 安装时选择此选项。 Run Git from the windows command prompt

如果您想要全局解决方案

警告:它可以通过不同的应用程序影响多个代理设置,但它肯定是你想要的:)

注意 如果您的代理设置中的 username:password 中有特殊字符,您需要对它们进行 URLENCODED。示例:http://DOMAIN%5Cuser+name%3AP%40%24%24w0rd@proxy.server.com:8080

您必须添加2个环境变量。

要在 windows 10 上做到这一点:

  1. 开始
  2. 搜索"Edit the system environment variables"
  3. (在系统属性的高级选项卡中)单击“环境变量...”
  4. (在系统变量中)点击"New..."
  5. 创建变量(变量名:HTTP_PROXY,变量值:http://proxyuser:proxypwd@proxy.server.com:8080
  6. 创建变量(变量名:HTTPS_PROXY,变量值:http://proxyuser:proxypwd@proxy.server.com:8080
  7. 重启Windows

正确设置代理设置非常痛苦。 我分享我的解决方案。

我在 Windows 10 和 Visual Studio 2015 年工作。 我必须在工作时设置代理设置并在家里删除它们。

为此,您有 2 个解决方案。

  1. 配置 Visual Studio 外部工具以使用适当的设置
  2. 在您的机器上安装工具(node、npm、bower)并使用它们(您可以设置 Visual Studio 选项来使用它们)

方案一(配置VS外部工具)

  1. 配置 Npm。在管理员提示符下执行以下命令。

    > cd "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External"
    > npm.cmd config set --global http_proxy http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
    > npm.cmd config set --global http_proxy http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
    
  2. 配置Git。添加位于 C:\Windows\Users\%USERNAME% 的 .gitconfig 文件。然后添加以下 key/value.

    [http]
        proxy = http://proxyuser:proxypwd@proxy.server.com:8080
    [https]
        proxy = http://proxyuser:proxypwd@proxy.server.com:8080
    
  3. 配置 Bower。添加位于 C:\Windows\Users\%USERNAME% 的 .bowerrc 文件。然后添加以下 key/value.

    {
      "proxy": "http://proxyuser:proxypwd@proxy.server.com:8080",
      "https-proxy": "http://proxyuser:proxypwd@proxy.server.com:8080"
    }
    

警告:如果您的代理密码中有特殊字符,您必须对代理进行编码url。示例:

Et Voilà :)

解决方案 2(在您的计算机上安装工具)

我已经在我的机器上全局安装了 node.js、npm、git 和 bower(因为我需要比 VS 中可用的 external/tools 更多的控制)。

  1. 安装 Node.js : NodeJS Website
  2. 安装 Npm 注意:Npm 由 Node.js 自动安装。 (换句话说,让node.js帮你安装)
  3. 安装Git:Git Website只需确保在Windows提示符[=中检查运行Git命令的这个选项121=]
  4. 安装 Bower(globalement):npm install -g bower
  5. 配置Visual Studio工具以使用安装的新工具。为此,启动 Visual Studio => 工具 => 选项 => 打开节点 "Projects and Solutions" => 打开外部 Web 工具 => 取消选中“$(DevEnvDir)\Extensions\Microsoft\Web Tools\External\git” .添加新的 "C:\Program Files (x86)\Git\bin"
  6. 设置代理设置。 运行 PowerShell 中的脚本作为 Administrator

我已经为 Windows 到 set/unset 代理设置创建了 2 个 powershell 脚本(在 Windows 10 上测试)。

  • 工作,我需要设置代理设置。

    运行 > ./proxy.ps1在 powershell 中

  • ,我必须删除代理设置。

    运行 > ./proxy.disabled.ps1 在 powershell 中

代理.ps1

# System Environment variable
$env:HTTP_PROXY = "http://proxyuser:proxypwd@proxy.server.com:8080"
$env:HTTPS_PROXY = "http://proxyuser:proxypwd@proxy.server.com:8080"
# Fix (some tools uses lowercase env variables)
$env:http_proxy = "http://proxyuser:proxypwd@proxy.server.com:8080"
$env:https_proxy = "http://proxyuser:proxypwd@proxy.server.com:8080"
# Git config
git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
git config --global https.proxy http://proxyuser:proxypwd@proxy.server.com:8080
# Npm config
npm config set proxy http://proxyuser:proxypwd@proxy.server.com:8080
npm config set https-proxy http://proxyuser:proxypwd@proxy.server.com:8080
# Restart Windows
Restart-Computer -Confirm

proxy.disabled.ps1

# Delete System Environment variable
Remove-Item env:\HTTP_PROXY
Remove-Item env:\HTTPS_PROXY
Remove-Item env:\http_proxy
Remove-Item env:\https_proxy
# Reset Git Config
git config --global --unset http.proxy
git config --global --unset https.proxy
# Reset Npm Config
npm config --global delete proxy
npm config --global delete https-proxy
# Restart Windows
Restart-Computer -Confirm

警告:如果您的代理密码中有特殊字符,您必须对代理进行编码url。示例:

警告: UNSET PROXY => 某些 Bower 设置可以在位于 C:\Users\% 的 .bowerrc 文件中覆盖用户名%。换句话说,如果它不起作用,请检查您是否有 .bowerrc 文件。然后删除以下键(如果存在):

{
  ...
  "proxy": "http://proxyuser:proxypwd@proxy.server.com:8080",
  "https-proxy": "http://proxyuser:proxypwd@proxy.server.com:8080",
   ...
}

警告: UNSET PROXY => 某些 nmp/node 设置可以在位于 C:\程序文件 (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\node\etc。换句话说,如果它不起作用,请检查您是否有 npmrc 文件。然后删除以下键(如果存在):

http_proxy="http://proxyuser:proxypwd@proxy.server.com:8080"
https_proxy="http://proxyuser:proxypwd@proxy.server.com:8080"

Et Voilà :)