web-dev-qa-db-fra.com

Cloner plusieurs référentiels git dans un répertoire local?

Est-il possible de git clone plusieurs référentiels git avec une seule commande (par exemple: git clone "1.git,2.git,3.git.." dans un répertoire local?

13
vir2al

Vous pouvez trouver un exemple de script comme celui-ci :

J'ai ce fichier appelé "clone" contenant les URL de plusieurs dépôts Git (extrait de djangosites.com . Site génial. À visiter absolument)

Fragment:

$ cat clone
https://github.com/igorsobreira/igorsobreira.com https://github.com/ella/ella https://github.com/divio/Django-cms/ https://github.com/palewire/palewire.com https://github.com/jabapyth/jfcom https://github.com/humanfromearth/snippify https://github.com/scaphilo/koalixcrm https://github.com/jlev/Boycott-Toolkit https://github.com/jbalogh/zamboni/ https://github.com/ASKBOT/askbot-devel https://github.com/emesik/djiki https://github.com/vicalloy/LBForum https://github.com/agiliq/agiliq https://github.com/bartTC/dpaste.de https://github.com/bartTC/Django-paste https://github.com/bartTC/dpaste_de/ https://github.com/fotochest/fotochest https://esp.mit.edu/git/esp-project.git https://github.com/titan2x/bashoneliners.git

Apparemment, il est plus difficile de cloner plusieurs pensions en même temps (git clone <repo1> <repo2> ... <repon> ne fonctionne pas). Alors j'ai écrit ce code bash bas pour le faire fonctionner:

Code:

atm in /home/atm/git/Django_repos
$ for f in `cat clone`; do `git clone $f`; done 

Vous en trouverez beaucoup plus sur Gist.github.com , comme celui-ci , pour cloner tous vos dépôts de GitHub:

#!/bin/bash
#
# Copyright 2011, Tim Branyen @tbranyen <[email protected]>
# Dual licensed under the MIT and GPL licenses.
#
# Automatically clone single or multiple repos into a folder, 
# great for setting up a git projects folder.
#
# Install: curl https://Gist.github.com/raw/902154/github.sh > /usr/local/bin/gh
#          chmod +x /usr/local/bin/gh
#

# Internal properties
[email protected]:
GITHUB_USERNAME=$(git config --global github.user)

function main {
  # Improperly configured user
  detect_user

  # Missing arguments
  args=$1
  if [ -z $args ]; then
    echo '
      gh: try ''`gh --help`'' for more information
    '
    exit
  fi

  # Display help text
  if [ $args = '--help' ]; then
    echo '
      Clone repos from your GitHub
        gh repo1 repo2

      Clone repos from others GitHub
        gh username/repo1 username/repo2

      Clone mixed repos:
        gh repo1 username/repo2

      Clone line separated repos from file:
        cat file | xargs gh
    '
    exit
  fi

  # Parse arguments and clone repos.
  find_repos
}

function detect_user {
  # If no username configured, attempt to pull from git --config
  if [ -n "$GITHUB_USERNAME" ]; then
    USERNAME=$GITHUB_USERNAME
  else
    echo '
      gh: missing username
      configure username with ''`git config --global github.user username`''
    '
    exit
  fi
}

function find_repos {
  for repo in $args; do
    # If a user provides the parameter username/repo pull in that specific repository.
    if [ `awk -v repo="$repo" -v delimit="/" 'BEGIN{print index(repo,delimit)}'` -ne 0 ]; then
      echo "Pulling in $repo";
      git clone $GITHUB_PREFIX$repo.git

    # Default to you.
    else
      echo "Pulling in $USERNAME/$repo";
      git clone $GITHUB_PREFIX$USERNAME/$repo.git
    fi
  done
}

main $*
8
VonC

Voici comment presque résolu pour moi-même:

git clone https://myrepo.com/folder.git && \
git clone https://myrepo.com/folder2.git && \
git clone https://myrepo.com/folder3.git

C'est plus facile à construire en utilisant un éditeur de code comme Sublime ou VSCode.

Le seul inconvénient pour moi: si vous ne stockez pas vos informations d'identification, vous devrez les saisir à plusieurs reprises.

5
Fábio Correia

J'ai créé un exemple de script pour mon projet. Notre projet comprend de nombreux référentiels qui doivent être clonés lorsqu'une nouvelle personne rejoint l'équipe.

Voici donc le contenu du script, que vous pouvez enregistrer dans des fichiers exécutables et exécuter.

   echo -n Please Enter your GitHub Username:
        read username
        echo -n Please Enter your GitHub Password
        read -s password // doesn't echoes the password on screen
        git clone 

https://$username:[email protected]/location/reponame1.git
https://$username:[email protected]/location/reponame2.git
....
https://$username:[email protected]/location/reponamen.git

Il est utile d’éviter les efforts manuels fastidieux et de s’assurer que tous les projets requis sont clonés en une fois.

J'espère que ma réponse aide aussi quelqu'un d'autre.

2
Sanjay Bharwani

Vous pouvez utiliser un mélange de solutions.

Utilisez credential.helper de git pour définir un délai de cache (voir this ). Vous pouvez ensuite utiliser un script/une liste similaire à celui suggéré par Fábio . De cette façon, vous ne devrez taper vos informations d'identification qu'une seule fois (généralement, à moins qu'un clone dure plus longtemps que le délai d'attente du cache.

git config --global credential.helper 'cache timeout 3600'
git clone https://[email protected]/myproject/myrepo.git
### password should be prompted 
git clone https://[email protected]/myproject/mysecondrepo.git
### look ma, no password Prompt!
git clone https://[email protected]/myproject/mythirdrepo.git
git clone https://[email protected]/myproject/myfourthrepo.git
git clone https://[email protected]/myproject/andsoforthrepo.git

C'est toujours séquentiel, mais ça aide et c'est assez simple, à mon humble avis.

0
Renato Back