Feature matrix

FeatureGitComposer
Main code repositoryAll code resides in one single, or a few Git repositoriesAll code resides in the packages in a Composer repository
Each single Composer package is represented by a Git repository
Code locationDevelopment happens in the app/ directoryDevelopment happens in the vendor/ directory
Core upgrade managementAdobe Commerce core is installed and upgraded using Composer, the result is committed in GitAdobe Commerce core is installed and upgraded using Composer; the result is committed in Git
Third-party module managementThird-party modules are installed in vendor/ if they are installed through the marketplace or packagist.org. Otherwise they are installed in app/All third-party modules are installed in the vendor/ directory
ReleasesReleasing is characterized by git merge and git pull or git checkout commandsReleasing is characterized by composer update and git pull or git checkout commands
Number of Git repositoriesFewMany
Development complexitySimpleComplex
Pull request complexitySimpleComplex
Code review complexitySimpleSimple
Dev/QA/UAT environment update complexitySimpleComplex
GRA support Yes icon Yes icon
Modules can automatically install external libraries No icon Yes icon
Flexibility in GRA composition No icon Yes icon
Module dependency management Yes icon Only through module.xml, limited functionality Yes icon Full dependency management through composer.json
Module versioning Yes icon You can define a version, but you cannot install a specific version Yes icon Full version support
Paid services neededGit repositoryGit repository, Private Packagist (± €600 per year)
Bitbucket integration with Jira possible Yes icon Yes icon
Changes to code instantly available for installation Yes icon Yes icon

Solutions to avoid

  1. Combining Composer and app/code for your modules

    Result in having all the disadvantages of both code management styles combined in your project. It adds unnecessary complexity, instability, and lack of flexibility.

    For example:

    • Explain both Git and Composer workflows (instead of only one of them) to the development team.
    • Install incompatible modules in app/code as there is nothing in place to stop that from happening.
    • Moving a module from app/code to Composer (or conversely) is cumbersome, especially with ongoing development.
  2. Satis Package Manager

    Private Packagist costs ± €600 per year. This cost is for the whole GRA combined, not per brand. Don’t try to avoid these costs by using the free solution Satis. Satis does not automatically update your packages whenever you push commits to git. Also Satis has no built in authorization. You must maintain a web server to run Satis. You end up spending a multitude of the Private Packagist subscription fee maintaining Satis.

  3. Start with Git, then move to Composer

    Make the choice for a code management approach at the start of your project. Switching from Git to Composer or conversely, with ongoing development is cumbersome and could lead to code loss and or revision history loss.

Previous pageGeneral best practices
Next pageCode review