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

时间:2017-12-29 05:47:46

标签: git cakephp version-control composer-php

我一直在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。我可以忽略供应商文件,除了我自己的目录吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

如下步骤,在保留vendor/的同时从VCS中删除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以外,vendor/中的所有文件和子文件夹都会在VCS中被忽略。

答案 1 :(得分:2)

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

这意味着您无需将vendor文件夹提交给VCS。因此,请将其添加到.gitignore文件中。

归档您的构建

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

不在供应商

中工作

您应始终能够删除vendor文件夹,并在不破坏Cake应用的情况下运行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",
    }
},