Magento upgrading with Git

It’s rather easy but you have to ensure that your site is based on some master repo that can be merged down the stream with earlier versions (repo that has all Magento versions as tags or branches that can be merged to latest from first). So here’s two scenarios to follow

1. My site is not in git

start by cloning from master repo that has all magento versions (at least to the version you are currently using)

get your clone and checkout new branch with the version you are currently using

copy over your current site to this version

after that done “git status” will show you the diff with original version you started with and all the edits you have made to it

its now smart to move all core edits to local codepool and revert any changes in core to original files, move any edts in default or base templates to your own template and revert changes in default or base template files. Same goes with all the files that look modified against the original version. This gives you “all my changes are separate from original code and they will not conflict my upgrades”, it’s wise to commit this state

If all things are separated from original files then it’s time to upgrade. Turn on default theme, disable all local and community extensions , merge the new version with your current branch. Visit the site to perform the upgrade

Now your site is upgraded and you can turn on your theme and custom extensions one by one to see what is compatible and what not. Debug and solve one by one

My site is already in git

if it is based on repo that has all versions you are in good condition (skip 2)

if it’s not then you can add some repo that has it all as your remote and start with merging your current version and separating changes from original like described in first scenario

make a new branch of your current site used

merge with new version

disable all local, community extensions, turn on default theme, and upgrade

enable theme, extensions one by one and debug where conflicts happen

It’s common to have a git setup like follows:

MAGENTO MASTER -> REMOTE ORIGN THAT HAS ALL MAGENTO VERSIONS

YOUR MASTER -> REMOTE ORIGIN IS MAGENTO MASTER

branch: yoursite_dev

branch: yoursite_stage

branch: yoursite_live

You always develop on your_dev branch andif changes are ready for evaluation you merge _stage with _dev and if changes are approved you merge the state to _live either from _dev or from _stage.