git clone
1つのコマンドで複数のgitリポジトリ(例:git clone "1.git,2.git,3.git.."
1つのローカルディレクトリにありますか?
this one のようなスクリプト例を見つけることができます:
私はいくつかのgitリポジトリのURLを含む「クローン」と呼ばれるこのファイルを持っています( djangosites.com から取得しました。素晴らしいサイトです。必ずアクセスしてください)
スニペット:
$ 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
どうやら、一度に複数のリポジトリを複製するのは難しい(
git clone <repo1> <repo2> ... <repon>
動作しません)。だから私はそれを機能させるためにこの短いbashコードを書きました:コード:
atm in /home/atm/git/Django_repos
$ for f in `cat clone`; do `git clone $f`; done
Gist.github.com には、 this one のように、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 $*
より一般的には、スクリプトによるアプローチが必要であり、 lilgeek
が言及されています bl4ckbo7/agt 、a pythonスクリプトには、最速の並列クローン処理機能を使用したクローン作成が含まれています。
これは私にとってほとんど解決された方法です:
git clone https://myrepo.com/folder.git && \
git clone https://myrepo.com/folder2.git && \
git clone https://myrepo.com/folder3.git
これは、SublimeやVSCodeなどのコードエディタを使用して構築する方がはるかに簡単です。
私の唯一の欠点:資格情報を保存しなかった場合は、何度も入力する必要があります。
プロジェクトのサンプルスクリプトを作成しました。私たちのプロジェクトには、新しい人がチームに加わったときに複製する必要があるリポジトリがたくさん含まれています。
これがスクリプトの内容です。いくつかの実行可能ファイルに保存して実行できます。
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
手間のかかる退屈な作業を避け、必要なすべてのプロジェクトを一度に複製できるようにするための静かな機能です。
私の答えが他の人にも役立つことを願っています。
すべてのリポジトリが同じ名前空間(ユーザー名)でホストされている場合は、次の操作を実行できます。
$ echo name1 name2 name3 | xargs -n1 | xargs -I{} git clone https://github.com/username/{}
説明
最初の部分は、スペースで区切られた名前を複数の行に分割します
$ echo name1 name2 name3 | xargs -n1
name1
name2
name3
次に、これらの名前のそれぞれが次のxargs
呼び出しに個別に渡されます。これにより、git clone
が呼び出され、URLの{}
サブストリングがリポジトリ名に置き換えられます。
$ git clone https://github.com/username/name1
$ git clone https://github.com/username/name2
$ git clone https://github.com/username/name3
すべてのリポジトリが同じ名前空間でホストされていない場合は、動的部分をecho
部分に移動し、URLの共通部分を最後の部分に残すことができます。
ソリューションを組み合わせて使用できます。
Gitのcredential.helperを使用してキャッシュタイムアウトを設定し( this を参照)、- Fábio で提案されているようなスクリプト/リストを使用できます。この方法では、資格情報を入力する必要があるのは1回だけです(通常、クローンがキャッシュタイムアウトより長くかかる場合を除きます)。
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
それはまだシーケンシャルですが、それは助けとなり、かなりシンプルです、IMHO。
これと他の投稿を読んだ後、私はこのスクリプトで終わりました。
リポジトリ用のローカル環境で認証が必要でした。
そのため、スクリプトは、リポジトリの資格情報を覚えておきたい場合に備えて、ユーザー、パスワード、オプションを尋ねてきます。
セキュリティ上の理由から、gitの構成ファイルからユーザーとパスワードを消去しています。 (これらの資格情報が別の場所に保存されているかどうかは不明です)
#!/bin/bash
#
#This script is intended to be used with repositories that need authentication
#
#Funtion to erase the $username:$password@ from the config file from git in the repo
function erase_user_pass() {
printf "${green}lets clean $1 from $2 \n${normal}"
sed -i 's/'"$1"'/'""'/g' $2
}
#function to download the repo
#1-clone the repo
#2-fix the config file by deleting the user and password
#3-execute the git command to automatically store the credentials if the user answer yes on the startup
#
# param 1 = name of the repo
# param 2 = string to complet the url of the repo
#
# example repo in https://git.something.com/yourcompany/your.project.git
#
# the param1 should be your.project
# the param2 should be git.something.com/yourcompany/your.project.git (without 'https://')
#
# download_repo 'your.project' 'git.something.com/yourcompany/your.project.git'
#
function download_repo() {
path=$(pwd)
printf "${blue}\n Importing $1\n\n${normal}"
git clone https://$username:$password@$2
file="$(pwd)/$1/.git/config"
replace_string="$username:$password@"
erase_user_pass $replace_string $file
cd ./$1
if [ "$STORE_OK" == 'Yes' ]
then
printf "${green} store credentials for the repo $1 \n${normal}"
git config credential.helper store
fi
cd $path
}
blue=$(tput setaf 4)
green=$(tput setaf 2)
normal=$(tput sgr0)
echo -n Please Enter your GitHub Username:
read username
echo -n Please Enter your GitHub Password:
read -s password
printf "\n\nDo you want to store your credentials locally?:"
STORE_OK=
select STORE_OK in Yes No
do
case $STORE_OK in
'') echo 'Please enter 1 for Yes, or 2 for No.';;
?*) break
esac
done
printf "${blue}\n\n lets import your repos\n\n${normal}"
# repo 1 https://git.something.com/yourcompany/your.project.git
download_repo 'your.project' 'git.something.com/yourcompany/your.project.git'
# repo 2 https://git.something.com/yourcompany/your.project2.git
download_repo 'your.project2' 'git.something.com/yourcompany/your.project2.git'
printf "${blue}\n Enjoy :)"
exit 0
リポジトリを指すようにdownload_repoの呼び出しを置き換える必要があります。これらは偽物です。
よろしくと他の回答に感謝します。
Windowsを使用している場合は、Powershellを使用できます。
次のように、お気に入りのテキストエディタでリストを作成するだけです。
git clone https://github.com/1.git;
git clone https://github.com/2.git;
git clone https://github.com/3.git;
git clone https://github.com/4.git;
git clone https://github.com/5.git;
PowerShellコンソールで、ディレクトリに移動します。
例
cd d:/myGitRepos
次に、リポジトリリストを直接コピーして、PowerShellコンソールを実行します。初回はユーザー名とパスワードを要求しますが、その後はそれを記憶します。