为什么选择供应商文件夹';s大小在推送到bitbucket git存储库后从100MB下降到15MB?

为什么选择供应商文件夹';s大小在推送到bitbucket git存储库后从100MB下降到15MB?,git,laravel,laravel-4,bitbucket,composer-php,Git,Laravel,Laravel 4,Bitbucket,Composer Php,我们通常将vendor文件夹保存在.gitignore中,但必须禁用它,因为我们在生产服务器上没有ssh访问权限,需要不时运行composer update 因此,我们提出了一个想法,即删除供应商文件夹中的.gitignore,在本地计算机上执行composer update,将所有内容推送到存储库,并通过FTP将其部署到生产服务器。(我们使用DeployHQ进行存储库->生产转移。) 但是,现在我的本地项目文件夹大小是100MB,而Bitbucket存储库大小只有20MB。我的本地供应商文件夹

我们通常将
vendor
文件夹保存在
.gitignore
中,但必须禁用它,因为我们在生产服务器上没有ssh访问权限,需要不时运行
composer update

因此,我们提出了一个想法,即删除供应商文件夹中的
.gitignore
,在本地计算机上执行
composer update
,将所有内容推送到存储库,并通过
FTP
将其部署到生产服务器。(我们使用
DeployHQ
进行存储库->生产转移。)

但是,现在我的本地项目文件夹大小是100MB,而
Bitbucket
存储库大小只有20MB。我的本地供应商文件夹大约是90MB,在存储库中,只有几兆字节

检查时,我在
Bitbucket
存储库中遇到了这些值:

vendor / doctrine /
    annotations
        cache → 89493d2c6e [89493d2c6e]
        collections → 3db3ab843f [3db3ab843f]
        common → c4255b9fbd [c4255b9fbd]
        dbal → 3253f7a1c1 [3253f7a1c1]
        inflector → 8b4b3ccec7 [8b4b3ccec7]
        lexer → bc0e1f0cc2 [bc0e1f0cc2]
在我的本地供应商文件夹中,我看到了Doctrine的类和PHP文件

所以我想问几件事

  • 为什么会发生这种情况?这些注释意味着什么?(我们可以将它们关联到符号链接吗?例如,Git知道它是条令,因此它将符号链接到条令的存储库,并将在
    Git pull
    ?)上从条令的存储库下载这些文件。)

  • 我们能否安全地将生产中的90MB供应商文件夹替换为git存储库中的5MB供应商文件夹?(通过在生产环境中执行git pull,或通过FTP将存储库文件夹复制到生产环境中。)

  • 您自己如何处理供应商文件夹?将其保持在
    .gitignore
    上,并在生产环境中通过SSH执行composer update命令,或者将它们推送到git存储库并将存储库推送到生产服务器?还有,哪一个更好

  • 多谢各位

    另外,生产服务器上未安装git或composer

    另外,我们的上传速度很低,上传90MB需要花费一个小时的时间。我还要指出这一点,因为我们寻求最快的替代方案

  • 基本上您是正确的,bitbucket知道它们是您的供应商文件夹中的git存储库,所以只需将它们链接到相应的存储库,就不会重复。 要真正理解注释,请查看

  • 不,5MB版本非常小,因为它不包含实际的代码,如果您尝试使用它,就会出现问题;)
    尝试运行
    git submodule init
    然后
    git submodule update
    查看它是否膨胀

  • 您不应该在生产服务器上执行
    composer update
    ,而应该在登台服务器上执行该操作(如果您的测试也没有ssh,甚至可以在您的本地环境上执行该操作(实际上不应该这样做,因为这是为了模拟您的产品环境)),如果可以,则将代码推送到生产服务器上。在生产服务器上执行
    composer更新
    ,顶多也有风险


  • 我们现在基本上就是这么做的。(除了登台服务器,因为我们没有登台服务器,现在只是从开发到生产。)然而,90MB的供应商文件夹在存储库上变成了5MB,我想知道为什么。那么正确的部署方式应该是什么?我的意思是,我知道我们需要将我们的供应商文件夹推到git,但是将它们推到生产环境中呢?我们需要在生产中安装git并发布git pull?因为您没有登台/测试服务器,我想您只是直接从您的开发机器中推送代码?如果是这样,您不需要提交供应商文件夹,只需在您的开发机器上运行
    composer install
    ,然后将供应商文件夹推到上面即可。要正确回答这个问题,我需要知道您是如何部署代码的。第一个问题是,通过FTP将整个项目文件夹从开发人员的机器复制到生产环境中,但这很糟糕,因为我们的上传速度很低。第二个是使用DeployHQ处理部署。DeployHQ获取我们的存储库并通过FTP将其推送到生产环境,但我不知道它是如何推送到供应商文件夹的。我不知道它是否使用git本身自动将5MB供应商文件夹转换为90MB。若并没有,第三种选择是在生产服务器上安装git并手动发出git pull。我们有一个糟糕的部署做法,所以我想从你那里得到一些信息。