2014-01-21 31 views
38

我正在嘗試構建一個rails項目,並且因爲我正在使用的主機無法訪問互聯網的git://協議(9418端口),我得到這樣強制安裝包使用https://而不是git://用於基於GitHub的gem

Fetching git://github.com/pivotal/jasmine.git 
fatal: unable to connect to github.com: 
github.com[0: 192.30.252.130]: errno=Connection refused 

故障運行bundle install時。

在Gemfile中的相關行沒有指定的git://作爲協議,它只是指向GitHub上作爲源寶石

gem 'jasmine', :github => 'pivotal/jasmine-gem' 

我有什麼做的,使打捆到使用https://而不是git://從GitHub中抽取寶石?

編輯:

是否有辦法不是編輯在Gemfile中每個受影響的行其他?如果項目的GemFile已更新,我寧願避免任何合併問題。

+0

的可能重複[混帳://協議阻止公司,我怎麼能圍繞得到(http://stackoverflow.com/questions/4891527/git-protocol-blocked-by -company-how-can-around-that) – Athafoud

回答

52

Git使用url..insteadOf配置選項提供URL重寫功能。

因此,爲了使所有連接到github.com使用https://,而不是混帳://

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

--global開關設置爲當前用戶的所有操作的git的配置選項,所以有次數可能過於侵入。但它確實避免了改變當前項目中的git配置。

+2

優秀的答案!我並不想在Gemfile中改變每一行,只是爲了在一個特定的客戶網站上運行。 –

+0

@ sam-kah-chiin answer(https:// stackoverflow。com/a/41382363/1712589)對此更好,因爲這個問題關於_ruby bundler_而不是git作爲一個整體。 – paulodiovani

27

你可以這樣做:

gem 'jasmine', git: 'https://github.com/pivotal/jasmine-gem.git' 
+1

我只需要在一個地方完成它,並且不希望它在每個服務器配置中潛入,所以這對我來說是正確的。 –

3

你應該能夠把一個完整的Git URL在你的Gemfile。例如:

gem 'jasmine', :git => 'https://github.com/pivotal/jasmine-gem.git' 
9

如果你想這只是對所有在一個Gemfile中,你可以在文件的頂部添加這些行寶石:

git_source(:github) do |repo_name| 
    repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") 
    "https://github.com/#{repo_name}.git" 
end 

或者您可以使用bundle config github.https true。但這隻影響你目前的環境。

This won't be necessary anymore with Bundler 2.0.

+0

請注意,此選項需要捆綁器1.13.2+。 –

+1

**如果您的生產環境依賴於heroku,請勿**配置github.https true配置文件! –

+5

@MichaelJohnston爲什麼不呢? –

6

,如果你部署到Heroku上,你可以添加BUNDLE_GITHUB__HTTPS(注意雙下劃線)作爲一個環境變量,它在Config Vars設置爲true(你的Heroku應用程序的儀表盤Settings選項卡下部分)。這將爲所有這些請求將協議從git://切換到https://

30

使用bundle config github.https true

+2

最佳答案!謝謝 – ZedTuX

+0

同意。比接受的答案好得多,因爲問題是_ruby bundler_ related,而不是git作爲一個整體。 – paulodiovani

相關問題