Php 更新symfony项目框架的最佳策略
我有一个定制的symfony项目和一个定制供应商。在项目的Php 更新symfony项目框架的最佳策略,php,symfony,composer-php,Php,Symfony,Composer Php,我有一个定制的symfony项目和一个定制供应商。在项目的composer.json中,类型设置为“project”。要更新我的供应商,我使用composer update。到目前为止,一切顺利 但是我如何更新我的项目本身呢?它是由composer的创建项目安装的,但我知道,对于composer来说,诸如更新项目之类的软件是不存在的。让我的“骨架”保持最新的最佳策略是什么?使用git需要initgitrepository并签出正确的分支/标记。因此,对于最终用户和版本管理来说,这不是我最喜欢的解
composer.json
中,类型设置为“project”。要更新我的供应商,我使用composer update
。到目前为止,一切顺利
但是我如何更新我的项目本身呢?它是由composer的
创建项目
安装的,但我知道,对于composer来说,诸如更新项目
之类的软件是不存在的。让我的“骨架”保持最新的最佳策略是什么?使用git需要initgit
repository并签出正确的分支/标记。因此,对于最终用户和版本管理来说,这不是我最喜欢的解决方案。还有什么其他方法可以用来解决这种情况呢?没有更好的选择,因为框架是完全免费的。您可以通过添加一个Symfony/Symfony
依赖项并创建自己的目录结构来使用Symfony
这意味着,虽然大多数项目都是从骨架开始的,但项目可以调整骨架以满足其需求。此外,骨架包含的某些捆绑包可能会从项目中删除,或者项目使用与骨架不同的设置
每次发布新的框架版本时,您都可以检查差异(例如),检查更改,并在项目中需要更改时将更改应用到项目中。目前我正在测试另一种方法。我创建了一个bash脚本,它包含在composer.json的安装后和更新后部分中。我知道它必须存在,但有了它,最终用户只需执行
composer更新
composer.json
[...]
"scripts": {
"post-install-cmd": [
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles",
"chmod +x init_update_app && ./init_update_app"
],
"post-update-cmd": [
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles",
"chmod +x update_app && ./update_app"
]
},
[...]
安装后:
#!/bin/bash
if ! git ls-remote origin > /dev/null; then
git init
git remote add origin https://github.com/xxx/xxx.git
fi
git fetch --tags
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag
#!/bin/bash
git fetch --tags
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag
更新后:
#!/bin/bash
if ! git ls-remote origin > /dev/null; then
git init
git remote add origin https://github.com/xxx/xxx.git
fi
git fetch --tags
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag
#!/bin/bash
git fetch --tags
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag
这种方法有什么缺点吗?我知道必须安装git,但这不是问题所在。可以通过检查现有标记来改进脚本,以防止再次签出相同的标记,或者检查是否安装了git 你说的骨架是什么意思?我指的是项目本身。。。以下文件夹结构:-[app]-[bin]-[vendor]-[web]-composer.json-等。。。使用composer update,我只能更新供应商文件夹中的软件包,但是其他的呢?应用程序文件夹(包含配置文件等)。对于骨架,我的意思是,供应商folderMinor版本之外的所有其他东西都不应该修改骨架,只有Symfony3会引入一些修改。仍然不清楚您在问什么。在开发方面,您可以使用gitpush更新存储库。要部署最终用户,将使用git clone,然后使用composer安装。要更新最终用户,将使用git pull,然后使用composer update。当然,还有许多其他的交付方法会对最终用户隐藏git/composer命令。但你似乎在要求其他东西?最简单的解决方案当然是gitOk,非常感谢。回答我的问题。。。所以我必须找到另一种方法。