Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Monorepo vs Manyrepos

A Monorepo vs Manyrepos

Fabien Potencier

April 25, 2016
Tweet

More Decks by Fabien Potencier

Other Decks in Programming

Transcript

  1. A Monolith Repository vs Many Repositories F A B I

    E N P O T E N C I E R @ F A B P O T
  2. A Monorepo vs Manyrepos F A B I E N

    P O T E N C I E R @ F A B P O T
  3. The monorepo https://github.com/symfony/symfony Bridge/ 5 sub-projects Bundle/ 5 sub-projects Component/

    33 independent sub-projects like Asset, Cache, CssSelector, Finder, Form, HttpKernel, Ldap, Routing, Security, Serializer, Templating, Translation, Yaml, ... 43 projects, 25 000 commits, and 400 000 LOC
  4. The monorepo Agent PHP extension Signify Chrome Extension PHP SDK

    Player Docs Book Go C C JavaScript PHP PHP ReST ReST
  5. Monorepos are
 awesome Change an API endpoint code
 and all

    its usages in all projects
 in one pull request
  6. Monorepos are
 awesome No switch from one repo to the

    next
 depending on which part of the codebase
 you are working on
  7. git log --oneline origin/2.0 src/Symfony/Component/Console 3be3dde [Console] Fixed comment dc2cc6b

    [Console] fixed input bug when the value of an option is empty (closes #6649, closes #6689) 151f2c1 Revert "merged branch egeloen/f-2.0-terminal-width (PR #6571)" 5157693 merged branch egeloen/f-2.0-terminal-width (PR #6571) f299bd0 [Console] Make getTerminalWith & getTerminalHeight public df5c171 updated license year 2fc41a1 [Console] fixed unitialized properties (closes #5935) 9aec4c8 Show correct class name InputArgument in error message 762649f shows correct class name InputOption in error message git log --oneline origin/2.0 da9d86b [Console] Fixed comment 5aaf6a3 [Console] fixed input bug when the value of an option is empty (closes #6649, closes #6689) efa6379 Revert "merged branch egeloen/f-2.0-terminal-width (PR #6571)" c9511da merged branch egeloen/f-2.0-terminal-width (PR #6571) 47e1ce7 [Console] Make getTerminalWith & getTerminalHeight public f3168bf updated license year fc6e023 [Console] fixed unitialized properties (closes #5935) 29e0ef3 Show correct class name InputArgument in error message 03cec88 shows correct class name InputOption in error message
  8. source of thruth "read-only" Code changes Access control Tags CI

    / CD ... ? ... repo repo repo repo repo Manyrepos Read-time sync commits, tags, ... Monorepo PR moves
  9. ... at scale git subtree split 1 monorepo 43 manyrepos

    5 maintained versions 220 maintained branches
  10. split.sh, a rewrite in Go + libgit2 Initial split From

    hours+ to < 1 minute Incremental splits From minutes+ to < 10ms
  11. split.sh for Agent PHP extension Signify Chrome Extension PHP SDK

    Player Docs Book Website Go C C JavaScript PHP PHP ReST ReST PHP/Symfony Open-Source Open-Source A contractor works on this part only Independant releases Deployed together