在作曲家项目中使用VCS的最佳实践

问题描述 投票:2回答:2

我一直在CakePHP编写应用程序,它使用composer从GitHub和其他来源安装插件和其他存储库。

直到现在我用来将所有vendor/文件添加到Git存储库,由于项目中安装了大量composer,因此大大增加了存储库大小。

根据使用VCS时的最佳实践,在vendor/文件中添加了.gitignore目录以防止推送到VC​​S存储库。

在我的CakePHP应用程序中,我需要某种在GitHub或其他来源上找不到的脚本。所以,我在中创建了这些脚本文件

vendor/anuj-tbe/

导向器。在composer.json文件中,标记为使用

"autoload": {
    "psr-4": {
        "App\\": "src",
        "AnujTbe\\": "vendor/anuj-tbe",
    }
},

并且还希望将脚本文件推送到VC​​S,因为以后无法使用composer下载它。

1. vendor/是放置自定义脚本文件的正确位置吗? 2.除了我自己的目录,我可以忽略供应商文件吗?

git cakephp version-control composer-php
2个回答
2
投票

是的,对于你的两个问题。

首先,不应在VCS中跟踪vendor/,您也可以将示例.gitignore file用于CakePHP。

其次,您可以将脚本文件放在任何您喜欢的地方,包括vendor/anuj-tbe/。所以你只需要在endor/anuj-tbe中排除v.gitignore

以下步骤从VCS中删除vendor/,同时保持vendor/anuj-tbe/

# After adding your scripts in vendor/anuj-tbe/
git add .
git commit -m 'add scripts'
touch .gitignore

确保以下内容包含在.gitignore中:

vendor/*
!vendor/anuj-tbe

继续以下命令:

git rm vendor/* --cached -r
git add .
git commit -m 'remove vendor in VCS except vendor/anuj-tbe'

现在除了vendor/anuj-tbe之外,在VCS中忽略vendor/中的所有文件和子文件夹。


2
投票

Composer会安装一个composer.lock文件,该文件将您的依赖项锁定到已安装的最新版本。这意味着下次运行composer install时,它将重新安装相同的依赖项。好处是,当您切换到另一台计算机并签出项目并运行composer install时,您将获得相同的依赖项。

这意味着您不需要将vendor文件夹提交到VCS。所以将它添加到你的.gitignore文件中。

归档您的构建

当您将Cake应用程序构建并部署到Web服务器时,它将包含vendor文件夹。那个版本的Cake应用程序将在那里停留很长时间。也许在将来的某个时候,当你回来时,你需要再次研究它,也许是偶然的一个作曲家依赖性消失了(即开源人员死了,现在这个包已经消失了)。因此,您应该使用vendor文件夹保留生产版本的存档,以便始终拥有与该特定版本一起使用的依赖项的副本。

不要在供应商工作

你应该总是能够删除你的vendor文件夹并运行composer install而不破坏你的蛋糕应用程序。因此,不要在该文件夹内工作或编辑那里的任何内容,因为您不会保留更改。在某些情况下,您可能需要在那里调试文件,或者尝试使用您正在处理的软件包,但正如我所说的那样。您应该能够删除它并轻松地重新创建它。

src的自定义代码

如果你想在你的Cake应用程序中添加更多的PHP源代码,它只会被你的Cake应用程序使用。将它放在src文件夹下。你可以称它为src/Lib/FooBar,它采用命名空间App\Lib\FooBar。无需修改您的composer.json文件。

通过插件共享

如果你想拥有一个由你所有的plugins共享的库。将它放在plugins文件夹中,并命名为plugins/FooBar。你可以将它添加到这样的作曲家:

"autoload": {
    "psr-4": {
        "App\\": "src",
        "FooBar\\": "./plugins/FooBar/src",
    }
},

它在技术上不必是一个Cake插件就在该文件夹中。

共享库

您可以添加一个名为lib的文件夹,其中包含您的不同库,并将这些文件夹添加到composer.json,如下所示:

"autoload": {
    "psr-4": {
        "App\\": "src",
        "FooBar\\": "./lib/FooBar",
    }
},
© www.soinside.com 2019 - 2024. All rights reserved.