2016-02-05 315 views
1

我最近從svn切換爲git,我有點糊塗了。Yii2和Git忽略文件

在yii2框架,有很多.gitignore文件,據我所知,使用這些文件。但我是一個有點困惑的原因是vendor目錄忽略。

在那裏的文件,需要在兩個我的開發和生產環境。

當我使用svn時,我曾經在那裏提交文件,但是我做錯了嗎?什麼是這樣做,如果我忽略了vendor目錄的正確方法。

我是否需要在每次執行推送時在兩個環境上運行composer update

回答

1

正如@chris所說---它畢竟只是一個推薦,它取決於你選擇上傳和維護供應商庫或不。爲了得到它是如何工作的想法,去composer.json你的應用程序裏面,你會看到這樣的內容:

"require": { 
    "php": ">=5.4.0", 
    "yiisoft/yii2": ">=2.0.6", 
    "yiisoft/yii2-bootstrap": "*", 
    "yiisoft/yii2-swiftmailer": "*" 
}, 
"require-dev": { 
    "yiisoft/yii2-codeception": "*", 
    "yiisoft/yii2-debug": "*", 
    "yiisoft/yii2-gii": "*", 
    "yiisoft/yii2-faker": "*" 
}, 

在哪裏,如果需要,您可以編輯和一組任意庫的具體版本。現在走這條線:

"yiisoft/yii2-bootstrap": "*" 

每次做composer update作曲只會得到其回購從packagist.org看到它here)時,將安裝找到的最後一個穩定版(什麼"*"手段)然後將其解決依賴由此可以看出裏面\vendor\yiisoft\yii2-bootsrap\composer.json

"require": { 
    "yiisoft/yii2": ">=2.0.6", 
    "bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*" 
}, 

最後一行將garante的蠢的最新穩定版本的安裝ter Bootstrap 3.3.x

在請求packagist.org後,這些確切的版本均已下載,每當您從任何機器上執行composer update時,都會將其保存到供應商文件夾。如果您上傳twitter引導程序3.3.2以及您的項目作爲示例,並且團隊成員將其下載回來而不必執行composer update,那麼他可能會發現自己陷入了一個問題,該問題假設在版本3.3.3中得到修復,並且他從不需要知道他是否只是進行了更新。

這是作曲家團隊說要回答的問題是什麼:Should I commit the dependencies in my vendor directory?

一般建議不......

...雖然這是很有誘惑力的承諾它在某些環境下,它會導致 幾個問題:

  • 大型VC庫的大小,當你更新代碼的diff。
  • 在您自己的VCS中複製所有依賴關係的歷史記錄。
  • 將通過git安裝的依賴關係添加到git倉庫中會將它們顯示爲子模塊。這是有問題的,因爲它們不是真正的 子模塊,並且會遇到問題。

也想就如何之大,應分配給github.com如果每個項目有額外的磁盤空間與它的供應商上傳。並想想在那裏可以找到多少完全相同的twitter bootstrap副本。

3

這是正確的。通常你不提交供應商的東西,因爲那是在其他地方受版本控制的第三方代碼。您應該使用作曲家來處理更新供應商特定的代碼。這意味着每次部署應用程序時,您都應該運行composer update,除非您已經擁有所有供應商代碼,並且沒有任何所需內容的更新。

+0

好吧,我明白你的觀點,但對我來說仍然存在一些困惑。假設我要開始一個新項目,我該從哪裏開始?在我的服務器(procuction)或本地機器(開發)上,然後將其推送到我的git ..現在,一旦所有東西都設置好了,並且可以說我開發了一個具有作曲者依賴關係的模塊,當我推動它時,我必須在那裏做一個作曲家更新,這會將相關性放在那裏。但如果我在模塊上工作了很長時間,並且依賴項已經更新,但我沒有更新我的本地作曲者,我的服務器將有不同的版本,對不對? – user2707590

+0

我不太確定,如果我理解正確,但composer.json(dev&prod)應該是相同的。這就是爲什麼你也可以在版本控制下使用它。所以在完成'composer update'後,dev和prod機器應該有相同的版本。 除此之外,它只是一個建議。如果您知道這一點,讓供應商文件夾在版本控制下是完全正確的。但是,編寫器更新時可能會覆蓋其中的代碼。 –