想问一下各位使用Composer的同学,通过Composer下载后的文件你们会把内容提交到Git上吗?
在官方的Faq上看到Should I Commit the dependencies in my vendor directory这篇文章,有建议是不提交到Git,那么应该如何处理切换分支就要重新composer install
这个问题呢?如果将vendor提交到版本库,那又应该如何处理包里面带有的.git文件夹呢?
*修正 composer update
应该为 composer install
回复内容:
想问一下各位使用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 文件,记录了依赖库产生任何改动之后,项目中所有依赖库的具体版本。请阅读关于此文件的文档。
你应当永远把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
文件夹的建议,忽略掉子库的所有.git
目录,只提交vendor
中的实务代码。
相信我,vendor
中的实质代码,和vendor/**/.git
下git库本身的管理用文件,绝对是冰山的水上部分和水下部分的关系。不忽略,会死人的,不夸张。
另外必须指出的是:分支开发时,就算不通过版本库同步vendor
,而只同步composer.lock
,也不会造成时间的浪费。
两个分支切换时,无非是两套具体版本换来换去。而 Composer 本身对所有下载的库都是缓存的。每次拉分支之后的composer install
必然命中全部的缓存,而不需要重复消耗下载的时间。
这个可以参考GitHub上的Laravel项目,https://github.com/laravel/laravel。
.gitignore文件:https://github.com/laravel/laravel/blob/master/.gitignore
也是很明显的不提交vendor文件夹。
首先如果你重来没有提交过 vendor 目录,切换分支也不需要 update,
其次正常情况下 vendor 下面的包是不带 .git 文件夹的。
至于需不需要提交 vendor 到git,这得看情况。
如果你是发布一个公开项目到 github,显然不需要提交,写好 composer.json 就可以了。
如果是私有项目,这看你是如何发布的。如果是打包,然后解压到服务器,可能需要提交,如果有更自动化的流程,比如自动更新,自动update,那你也可以不提交。
看你希望怎么管理项目,这方面没有定论,不过一个建议是应该把第三方库的版本依赖写确切,不要写通配,正常情况下也不要用composer update,第三方库又没问题为什么要update?除非你确实遇到第三方库当前版本有bug需要升级,或者你的新功能要依赖第三方库新版本的特性,不然你莫名其妙update干嘛?
一个准则,在开发任何新特性之前,第三方库的版本依赖就应该是确定的,这方面不能有含糊的地方,不然你这项目管理就是有问题了。
既然第三方库的版本确定,那么推不推vendor就是另外的问题了,如果你懒得部署时再install,那么大可以直接就推去远程把第三方库当成项目的一部分,这也是比较推荐的做法,因为打包捆绑的好处就是分发方便,这方面我是支持不忽略vendor的,当然更大的原因是天朝的网络……实在没法每次都重复等,妈蛋等啊等再好的撸码好心情也要等坏啊……

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具