2014-12-31 21 views
5

我正在開發laravel包(讓我們稱之爲包A),它需要另一個包(包B https://github.com/dropbox/dropbox-sdk-php)。在作曲者的依賴中使用包叉

我做了包B的叉(https://github.com/EmilioBravo/dropbox-sdk-php),取得了一個新的分支一些變化「fix64」,並增加我的GitHub庫作爲包A的composer.json存儲庫作爲作曲家文檔指出:

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "https://github.com/EmilioBravo/dropbox-sdk-php" 
    } 
], 
"require": { 
    "php": ">=5.4.0", 
    "illuminate/support": "4.2.*", 
    "dropbox/dropbox-sdk": "dev-fix64" 
}, 

如果我把作曲家更新從包A內它正確下載我的叉子,但是,如果使用套餐A中的另一個項目(項目C)從它的依賴和呼叫作曲家更新IM,作曲家說,它可以找到dev-fix64。

問題1

- emilio-bravo/platform dev-dropboxfix requires dropbox/dropbox-sdk dev-fix64 -> no matching package found. 
  • 埃米利奧-喝彩/平臺DEV-dropboxfix需要收存箱/保管箱-SDK DEV-fix64 - >沒有發現匹配包。

  • emilio-bravo/platform dev-dropboxfix的安裝請求 - > emilio-bravo/platform [dev-dropboxfix]可以滿足。

只有添加我的回購作爲項目Çcomposer.json庫找到我的叉子的分支。

我發現的另一種方法是將我的叉克隆到滿意的存儲庫中。

但它感覺不對。我怎樣才能讓作曲家從GitHub中找到我的叉子?

+1

你有沒有找到有效的解決方案呢?我有完全相同的問題。 –

+1

可能的重複[如何與作曲家需要一個叉](http://stackoverflow.com/questions/13498519/how-to-require-a-fork-with-composer) –

回答

2

將自定義存儲庫添加到主項目是讓Composer知道新來源的唯一方法。

它是故意這樣做,因爲否則回購可能會添加回購可以添加回購...沒有保證有一個有限的回購清單。

此外,添加一個回購並沒有說明哪個軟件將在那裏找到,Composer將掃描每個標籤和分支。在理論上,一個存儲庫可以有另一個分支用於一個完全不同的,知名的包,提供它的一個更新的版本,並添加一些惡意行爲。

作曲家一般來說似乎非常適合於防範遠程代碼執行,除非是不知情的人做出錯誤的決定。

因此,如果您在packagist.org上發佈的軟件包中發現錯誤,那麼對於每個人而言,最好的方法就是提出拉取請求。第二種最好的方法是用新名稱分發項目並將其發佈到packagist.org上。使用具有相同項目名稱的分叉回購來修補問題並將Composer指向它是最糟糕的解決方案,通常只適用於您自己的項目的依賴性。