Using git for a project with many, many repos

The Plone project consists of 192 different repos: https://github.com/plone/

During development, sometimes 2 or 4 or 10 different repos will need to be touched to fix a bug or implement a feature. It would be great if all these could be branched together and merged together (e.g. a pull request closing issueX containing commits to repo1, repo2 and repo3).

  • Mercurial and Git custom SSH key location
  • managing production credentials in heroku
  • git-svn ignore large binary files
  • Why does GitHub recommend https over ssh urls?
  • How To Get Git Completion For Branch Names On Mac OSX?
  • Rewriting multiple git repos into one
  • Releases require the entire set of repos to be branched and tagged together.

    Pre-git, a release was defined by a file listing the svn revision numbers of all the modules that make up the release. Does git give us a more streamlined way to work?

    At first glance, it seems like “Superprojects” might be applicable:

    you can more specifically define the relationships between the
    projects with tags and branches in the superprojects

    http://progit.org/book/ch6-6.html#superprojects “Git/Submodules and Superprojects” seems to confirm this, but remains vague (doesn’t address tags or branches). http://en.wikibooks.org/wiki/Git/Submodules_and_Superprojects

    Another tool that sounds relevant is Joey Hess’s mr:

    The mr(1) command can checkout, update, or perform other actions on a set
    of repositories as if they were one combined respository.

    http://kitenet.net/~joey/code/mr/ (I would be concerned that this would result in 192 different branches that happen to have the same name, instead of 1 branch that ties together all the repos.)

    This question looks relevant: Is anyone really using git super/subprojects? One answer states:

    our project (bitweaver, a content management system) is a highly modular
    system, with nearly 160 repositories – http:// github.com/bitweaver/”.

    That sounds like our case. It cites “severe limitations” with submodules and recommends mercurial. It sounds like mr could help to deal with those (“perform git commands to all directories in the super-repo”).

  • Remove an unreferenced commit from git repository
  • github forking and upstream changes
  • Using a PHP script as a post-commit hook, to trigger a bash script, to do a git-pull?
  • Can I save the changes of my some old commit, gotten via `git checkout`?
  • Rename the current branch to master
  • My git push is stuck on a large file. What to do?
  • 2 Solutions collect form web for “Using git for a project with many, many repos”

    I would use git submodules in an “all” repo. Also, consider “git slave” if you find work spanning many repos. That can save a lot of effort.

    Why not take a look at the repo tool that’s used by android ?

    Git Baby is a git and github fan, let's start git clone.