﻿# 使用 Git 通訊協定無法連接 GitHub 儲存庫的解決方法

之前練習 Visual Studio 2015 的時候，都是直接到 Microsoft Azure 上直接建立 VM 進行測試，測試過程一直都非常順利。今天正式將 [Visual Studio 2015 CTP 5](https://web.archive.org/web/20141027022610/http://support.microsoft.com:80/kb/2967191/en-us) 安裝到我的筆電上，但過程卻不太順利，因為每當我建立起一個 ASP.NET MVC 6 專案，該專案總是永遠無法建置成功，研究到最後終於發現，原來問題是卡在 Git 這個環節，這個詭異的問題，就讓我娓娓道來吧。

首先，先利用 Visual Studio 2015 建立起一個 **ASP.NET 5 Starter Web** 專案，不過當專案被建立後，卻完全無法偵錯，原因出在**建置動作**一直無法完成，這個問題牽涉的技術領域還蠻廣的，我覺得這並不是一般 ASP.NET 開發人員能夠理解的範圍。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c080ce6f78d0729a38de-image_2608.png)

不但建置沒有完成，在 **方案總管** (Solution Explorer) 也會看到 References 節點會一直出現 **(Restoring…)** 的訊息，但事實上根本與 References 一點關係都沒有，NuGet 套件老早就下載完了！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fb193bdc219ea06316ec-image_2611.png)

由於 ASP.NET 5 與 Visual Studio 2015 採用了全新的專案架構，整合了市面上知名的前端流程工具，如 [Grunt](http://gruntjs.com/), [Bower](http://bower.io/) 等，也整合了 [Node.js](http://nodejs.org/) 下的 [npm](https://www.npmjs.com/) 工具。在這些工具裡，[Bower](http://bower.io/) 更結合了 [Git](http://git-scm.com/) 工具，用來取得 Bower 套件內容，傳統 ASP.NET 開發人員，似乎很難懂得這麼多東西，我想未來這可能是 ASP.NET 開發人員進入 ASP.NET 5 的一點小小障礙吧。

由於專案一直停留在建置中的狀態，導致專案無法執行，也無法偵錯，什麼事都不能做，Visual Studio 2015 就像是當掉了一樣，第一次遇到這種情況還真的很無助。

由於我之前研究過 [Grunt](http://gruntjs.com/) 與 [Bower](http://bower.io/)，我先進入命令提示字元輸入 **grunt**，結果卡在 **bower install** 這個工作。所以我改打指令 **bower install**，結果卡在其中一步，也就是安裝 jquery 套件的時候一直無法完成 bower validate 動作，如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d1243fc8d33a05331a14-image_2609.png)

我想了很久，想說來嘗試看看直接執行 **git clone git://github.com/jquery/jquery.git** 看看，果不其然，真的卡在這個步驟！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ac64ef3b656c344fcc80-image_2610.png)

※ 這個網址是用 **git://** 這種通訊協定，Git 通訊協定走的是 Port 9418，如果你的上網環境會阻擋不知名的埠號 (Port) 可能要特別注意。

這個連不上的問題，我在幾個月前其實有遇過，也就是使用 Git 通訊協定下載 GitHub 儲存庫時，會有連線速度過慢或是根本無法連上的情況，只是當時並沒有找出原因 ( 懷疑這根本是 GitHub 網站的問題 )，不過今天終於被我找到替代方案了！

由於 GitHub 提供了四種通訊協定可以下載 Git 儲存庫，分別是：

1.  Git 通訊協定 ( git://github.com/jquery/jquery.git )
2.  SSH 通訊協定 ( git@github.com:jquery/jquery.git )
3.  HTTPS 通訊協定 ( https://github.com/jquery/jquery.git )
4.  Subversion 通訊協定 ( https://github.com/jquery/jquery )

Bower 套件預設採用 Git 通訊協定，套件大多都放在 GitHub 上，偏偏在 GitHub 的 Git 通訊協定是最不穩定的一個存取管道，網路速度也超級慢，這次又遇到 jQuery 專案比較大，下載時間較長，導致卡住的機會又更高。所以如果要從 GitHub 存取 Git 儲存庫，建議還是多採用 SSH 與 HTTPS 通訊協定最為穩定可靠，因此我的替代方案就是設定 Git 的全域設定值 ( **\--global** )，預設將所有 **git://** 網址都自動替換成 **https://** 網址，設定的方式只要輸入以下指令即可：

```
git config --global url."https://".insteadOf git://
```

設定完成之後，所有問題都解決了！Git 終於可以成功 clone 儲存庫，Bower 終於可以正確安裝套件，Grunt 終於可以完整執行，Visual Studio 2015 終於可以成功建置，這完全就是一個食物鏈啊！>"<

**相關連結**

-   [github - git:// protocol blocked by company, how can I get around that? - Stack Overflow](http://stackoverflow.com/questions/4891527/git-protocol-blocked-by-company-how-can-i-get-around-that/10729634#10729634)
-   [Docs - git:// blocked workaround · Issue #250 · bower/bower](https://github.com/bower/bower/issues/250)
-   [Git - The Protocols](https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols)
