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?
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 $*
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.
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.
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.