Iris, miembro de este equipo, nos ha hecho el favor de crear este artículo ya que controla a la perfección el tema.
Solución:
No realmente, a menos que:
-
tiene un proyecto 21 que hace referencia a los otros 20 como submódulos.
(en cuyo caso un clon seguido de ungit submodule update --init
sería suficiente para clonar y verificar los 20 proyectos) -
o de alguna manera enumera los proyectos a los que tiene acceso (API de GitLab para proyectos) y repite ese resultado para clonar cada uno (lo que significa que se puede programar y luego ejecutar como comando “uno”)
Desde 2015, Jay Gabez menciona en los comentarios (agosto de 2019) la herramienta gabrie30/ghorg
ghorg
le permite clonar rápidamente todos los repositorios de una organización o de un usuario en un solo directorio.
Uso:
$ ghorg clone someorg
$ ghorg clone someuser --clone-type=user --protocol=ssh --branch=develop
$ ghorg clone gitlab-org --scm=gitlab --namespace=gitlab-org/security-products
$ ghorg clone --help
También (2020): https://github.com/ezbz/gitlabber
usage: gitlabber [-h] [-t token] [-u url] [--debug] [-p]
[--print-format json,yaml,tree] [-i csv] [-x csv]
[--version]
[dest]
Gitlabber - clones or pulls entire groups/projects tree from gitlab
Aquí hay un ejemplo en Python 3:
from urllib.request import urlopen
import json
import subprocess, shlex
allProjects = urlopen("http://[yourServer:port]/api/v4/projects?private_token=[yourPrivateTokenFromUserProfile]&per_page=100000")
allProjectsDict = json.loads(allProjects.read().decode())
for thisProject in allProjectsDict:
try:
thisProjectURL = thisProject['ssh_url_to_repo']
command = shlex.split('git clone %s' % thisProjectURL)
resultCode = subprocess.Popen(command)
except Exception as e:
print("Error on %s: %s" % (thisProjectURL, e.strerror))
Un trazador de líneas con rizo, jq, tr
for repo in $(curl -s --header "PRIVATE-TOKEN: your_private_token" https:///api/v4/groups/ | jq ".projects[].ssh_url_to_repo" | tr -d '"'); do git clone $repo; done;
Para Gitlab.com use https://gitlab.com/api/v4/groups/