Hi @shehjadk07!
As @kishore_kumar_ and @bimmiso have already mentioned, the official recommended way for this is either content packages or via oak-upgrade tool as outlined in this documentation.
Personally, I would prefer the content package based approach.
Another thing that you should think about is: What kind of content are you talking about?
Usually, the most common classifications would be:
- Sample content for development purposes
This is created by the developers and provided, e. g. to demonstrate the behavior of a component or to show component variations based on their configurations. It can also be used for automated testing, sometimes even as a kind of documentation or user manual for content editors to refer to.
This kind of content should be maintained as a dedicated Maven module in your source code repository and can easily be redeployed to any new instance. - Real production(-like) content
In some projects, there are processes in place for a content backflow from higher environments (e. g. staging or even production) to lower development environments. This is usually used for testing purposes to and to be able to work with production-like content during the development cycle.
In this case, there will already be a process to get content from other environments to your local one and you may leverage the very same process whenever you deploy a new local SDK instance.
For anything else, I would suggest to create a dedicated CRX Package, update/built and download it before you want to switch the SDK version and install it to your new SDK instance.
Looking at your suggestions:
1. Will definitely work for "classic" AEM, e. g. when moving from 6.4 to 6.5 or similar. I'm not sure if it will also work for the cloud SDK. As it is not mentioned in the above linked documentation, I doubt that it is supported and would not follow this approach.
2. Separating the datastore won't help here. You would need to separate the whole repository which is not possible with the SDK as far as I know.
3. Sounds like the outlined approach using packages and is my recommendation.
Focusing on approach #3 and trying to optimize/automate the process as far as possible would be my preferred way to go.
Hope that helps!