下面由composer教學專欄為大家介紹關於composer下載的內容需不需要提交到git的問題,希望對需要的朋友有所幫助!
具體問題:
想問各位使用Composer的同學,透過Composer下載後的檔案你們會把內容提交到Git上嗎?
在官方的Faq上看到Should I Commit the dependencies in my vendor directory這篇文章,有建議是不提交到Git,那麼應該如何處理切換分支就要重新composer install這個問題呢?如果將vendor提交到版本庫,那又該如何處理套件裡面帶有的.git資料夾呢?
*修正 composer update 應該為 composer install
解決方案:
事實上無論是分支開發,或是部署到生產環境,無論composer.json中版本號的通配符規則你怎麼寫,我們最關心的永遠是一個最根本內容:開發當時,我們用的所有依賴庫,具體的版本號是哪一個?
而這個內容是composer.lock檔案支援的。 composer 本身透過維護 lock 文件,記錄了依賴函式庫產生任何變更之後,專案中所有依賴函式庫的具體版本。請閱讀關於此文件的文件(https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file)。
你應該永遠把composer.lock檔案提交到版本庫,並在切換分支或部署之後,使用composer install安裝 lock 檔案中指定的特定依賴版本。
從這個意義上講,你是否將vendor目錄提交到主版本庫都是對的。提交與否這是一個互有取捨的選擇:
如果提交:
優勢:「拉取即用」的便利。
劣勢:訊息重複。因為你開發當時的具體版本,lock 檔案已經記錄下來。也就是說vendor資料夾表述了同一件事情。
劣勢:引入不一致性的風險。因為雖然 Composer 保證 lock 檔案和vendor目錄一致,但提交到 git 版本庫畢竟是一個人工行為。你難以保證哪一次不會落下二者之一。
如果不提交,優劣勢反過來。不再重複。
我的想法是:我建議你堅持「正確性優於易用性」的想法。我的建議是不提交vendor,僅使用 lock 檔案維持開發當時的依賴函式庫版本。
如果提交的話,請務必遵循以下兩個準則:
(1)務必保證vendor和composer.lock這兩個文件的提交是同步的。提了一個,必須提另一個。
任何開發,如果任何一次 commit 只交了其中一個,必須追責。
這個的理由是:雖然我們提交vendor保證拉取下來立刻可用,但是git 是有部分檢出(checkout)功能的—— 對於一個Composer 項目,我有權遵照Composer 項目的慣例,不檢出vendor目錄,而是拉取下來實務程式碼之後隨手一個composer install,你不能說我錯。
(如果誰說這個是錯的,我支持你分分鐘上sf和知乎曝光你的無良公司和技術主管)
(2)務必按照Composer對於提交vendor文件夾的建議(https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md),忽略掉子庫的所有.git目錄,只提交vendor中的實務代碼。
相信我,vendor中的實質程式碼,和vendor/**/.git下git庫本身的管理用文件,絕對是冰山的水上部分和水下部分的關係。不忽略,會死人的,不誇張。
另外必須指出的是:分支開發時,就算不透過版本庫同步vendor,而只同步composer.lock,也不會造成時間的浪費。
兩個分支切換時,無非是兩套具體版本換來換去。而 Composer 本身對所有下載的庫都是快取的。每次拉分支之後的composer install必然命中全部的緩存,而不需要重複消耗下載的時間。
以上是composer下載的內容需不需要提交到git呢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!