Master de II. ULL. 1er cuatrimestre. 2020/2021
In revision control systems, a monorepo (“mono” from Greek μόνος, mónos, ‘single, alone’ and “repo” short for repository) is a software development strategy where code for many projects is stored in the same repository.
A mono-repo is a repository containing all of the source for an organization. It presents source in a single, hierarchical directory structure. A mono-repo supports standard operations such as atomic commits and merges across the code it contains.
Critically, in order to host all source for an organization, the performance of a mono-repo must not degrade as it grows in terms of:
Most organizations do not have a mono-repo because existing DVCS systems (e.g., Git and Mercurial) suffer performance degradation as the size of the repository and the number of users increase. Over time, basic operations such as git status
, git fetch
, etc. become slow enough that developers, given the opportunity, will begin splitting code into multiple repositories. Also may be some members are not allowed to have visibility access to some organization projects.
meta is a tool for managing multi-project systems and libraries.
meta is powered by plugins that wrap common commands, letting you execute them against some or all of the repos in your solution at once. meta is built on loop, and as such inherits loops ability to easily target a particular set of directories for executing a common command (eg meta git status --include-only dir1,dir2
. See loop for more available options).
meta project import
will add an existing project to your .meta
file and clone itmeta project create
will add a new directory and git initialize it, and add the given remote1
2
3
4
5
6
7
8
➜ meta git:(master) ✗ meta project help create
Usage: meta-project-create <destFolder> <childRepoUrl>
Creates a new folder and initializes git with provided remote.
➜ meta git:(master) ✗ meta project help import
Usage: meta-project-import <destFolder> <childRepoUrl>
Configures .meta file and imports a project from provided 'childRepoUrl' using git clone into 'destFolder'.
I think we need to extend create with only a directory
To clone in step a meta-repo and all the sub repos yo do somthing like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
➜ my-first-plugin git:(master) ✗ meta git clone git@github.com:mateodelnorte/meta.git
meta:
Cloning into 'meta'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 1096 (delta 0), reused 1 (delta 0), pack-reused 1092
Receiving objects: 100% (1096/1096), 1.21 MiB | 2.48 MiB/s, done.
Resolving deltas: 100% (698/698), done.
meta ✓
/Users/casianorodriguezleon/campus-virtual/2021/learning/learning-meta/my-first-plugin/meta/plugins/symlink-meta-dependencies:
Cloning into 'plugins/symlink-meta-dependencies'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 111 (delta 0), reused 1 (delta 0), pack-reused 107
Receiving objects: 100% (111/111), 159.40 KiB | 1.01 MiB/s, done.
Resolving deltas: 100% (50/50), done.
...
meta git clone
lacks the capacility to recursively clone nested meta projects.
See