2013-09-05 27 views
8

我有這樣的事情如何強制Composer使用https://而不是git://?

"repositories": [ 
    { 
     "type": "package", 
     "package": { 
      "name": "myrepo", 
      "version": "dev-master", 
      "source": { 
       "url": "https://github.com/me/myrepo.git", 
       "type": "git", 
       "reference": "master" 
      } 
     } 
    }, 

但當作曲拉回購,在.git/config的遙控器(origincomposer)被設置爲git://github.com/me/myrepo.git

[remote "origin"] 
    url = git://github.com/me/myrepo.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    pushurl = [email protected]:me/myrepo.git 
[branch "master"] 
    remote = composer 
    merge = refs/heads/master 
[remote "composer"] 
    url = git://github.com/me/myrepo.git 
    fetch = +refs/heads/*:refs/remotes/composer/* 

我不能推它,因爲Github上不git://工作。我必須手動將其更改爲https://,然後按。我在URL中指定了https://,但爲什麼這不被尊重?

回答

17

您可以更改用於github上使用此命令的協議:

composer config --global github-protocols https 

然後重新安裝廠商應該做你想要什麼。

+0

在Zend Framework 2上,命令是'php composer.phar config --global github-protocols https' – KalenGi

+0

@KalenGi:這是同樣的事情,但是您使用的是本地安裝的'composer'可執行文件。 phar'擴展添加。 – iconoclast

+0

@Seldaek:這項工作適用於GitHub以外的網站嗎?例如:git.code.sf.net? – iconoclast

4

github-protocols選項只適用於GitHub,但還有另一種方法可以解決不依賴於GitHub服務器的問題。

你只是告訴Composer使用不同的URL,就像你分叉一個包一樣,你想確保Composer使用你的fork而不是默認包。

此處,我用我自己的叉子一包的例子,我強迫該協議在URL中http,而不是git另:

​​

在Laravel4-PHPExcel的情況下,我不得不盡早修復了一個錯誤,並且在等待維護人員接受我的請求時需要我的修復。 (順便說一句,他已經對他的代碼做了改進,所以我放棄了我的fork的使用,但是我在這裏展示它,因爲它作爲一個例子很有用,即使我的代碼不是在實踐中更有用)。

在TCPDF的情況下,它們是我的應用程序使用的唯一指定Git協議的包,因此向我的客戶位置的安全團隊請求並請求打開時似乎很荒謬端口9418,當我可以只使用HTTP而不是,在我看來,它們應該用於開始。我在URL中更改的所有內容都將替換githttp,但它與任何其他用戶指定的URL一樣工作,允許您指定Composer用於給定包的URL。


UPDATE

只是爲了被完整起見,我覺得我應該提到的是,你還可以在Git的水平解決問題爲好。在我遇到這個問題的應用程序中,我覺得在Composer中這樣做更爲合適,但是您的情況可能會有所不同,您對這種情況的最佳方法的看法也會有所不同。

Git方法可以做得更全球化,您可能會看到這是一種優勢(或不是)。最簡單的情況是讓Git來代替一個URL另:

git config --global url."http://git.code.sf.net/p/tcpdf/code".insteadOf "git://git.code.sf.net/p/tcpdf/code" 

但你也可以通知Git經常更換 '的git://' 是以 'https://':

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

在示例中,我將它放在用戶的全局配置文件中,但可以用--local替換--global,將其放入存儲庫的配置文件(或--system將其放入系統的配置文件中)。

+1

謝謝,完美的TCPDF – loicfavory