Php 更新symfony项目框架的最佳策略

Php 更新symfony项目框架的最佳策略,php,symfony,composer-php,Php,Symfony,Composer Php,我有一个定制的symfony项目和一个定制供应商。在项目的composer.json中,类型设置为“project”。要更新我的供应商,我使用composer update。到目前为止,一切顺利 但是我如何更新我的项目本身呢?它是由composer的创建项目安装的,但我知道,对于composer来说,诸如更新项目之类的软件是不存在的。让我的“骨架”保持最新的最佳策略是什么?使用git需要initgitrepository并签出正确的分支/标记。因此,对于最终用户和版本管理来说,这不是我最喜欢的解

我有一个定制的symfony项目和一个定制供应商。在项目的
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,非常感谢。回答我的问题。。。所以我必须找到另一种方法。