For #1 you probably should go through Choosing an App Engine environment first. I can't help with more details as I'm not a PHP developer (which is also why I can't answer #2).
For #3 GAE itself only tracks versions at the entire service level, each deployment consisting of the entire set of the service's deployable artifacts.
However it may be able to skip unnecessarily uploading unchanged artifacts. I know it does it at least for python standard environment services if re-deploying from the same workspace, in rsync
style. You can confirm this by increasing the deployment verbosity via the --verbosity
option. I'm unsure if the fact that I was using git for the project mattered.
For the flexible environment services things are a bit more complex, since the deployment artifacts are docker images, see How can I speed up Rails Docker deployments on Google Cloud Platform?
If you'll have a multi-service app each service can be deployed individually, but a service deployment in itself is a complete one, not an incremental one, creating a new version of the service.
The app-level configs (applicable to all services) are individually re-deployable, without re-deploying any of the services:
To deploy the other configuration files of your service, you must
target and deploy each file separately. For example:
gcloud app deploy cron.yaml
gcloud app deploy dispatch.yaml
gcloud app deploy index.yaml