どのように新しいコンピュータにすべてのGitリポジトリを移行するには?


これまでに古いコンピュータから新しいものに変更する必要があります手動ですべてのGitのリポジトリをクローンする必要がありますか?
以下のスクリプトはフォルダ構造を保ち、すべてのリポジトリを新しいコンピュータに移行させます.
dirs=$(find . -name '.git' -type d | sed 's/\/\.git//')

for dir in $dirs; do
  GIT_DIR=$dir/.git

  # Creates the folder structure
  echo mkdir -p $dir;

  # Clones the repository in the same folder
  echo git clone $(git --git-dir=$GIT_DIR remote get-url origin) $dir;

  # Re-adds other remotes
  for r in $(git --git-dir=$GIT_DIR remote | grep -v origin); do
    echo git --git-dir=$GIT_DIR remote add $r $(git --git-dir=$GIT_DIR remote get-url $r);
  done

  echo
done > clone-all.sh
すべてのリポジトリが格納されている基本フォルダでシェルセッションにペーストする必要があります.スクリプトはファイル名を作成するclone-all.sh . 次に、このファイルを新しいコンピュータにコピーして実行するだけです.

スクリプト説明
スクリプトは、最初に.git Gitリポジトリとして指定されるフォルダ.このリストから新しいコンピュータで実行されるコマンドを出力します.
それぞれの出力コマンドは以下の通りです.
  • 同じ構造を維持するフォルダを作成するコマンド
  • 同じフォルダ名にリポジトリをクローンするコマンドorigin リモート
  • 他のリモートを追加するコマンドorigin ) 新しくクローンされた倉庫に.


  • 古いコンピュータでは、スクリプトを実行する前に、フォルダ構造が次のようになりました.
    pwd
    /home/douglas/code
    
    ➜  tree -L 2
    .
    ├── create-clone-script.sh
    ├── other
    │   ├── audited_views
    │   ├── bitmovin-ruby
    │   ├── cucumber-ruby
    │   ├── devise-i18n
    │   ├── douglaslise.github.io
    │   ├── gitlab-ci-monitor
    │   ├── rubocop
    │   ├── sendgrid-ruby
    │   └── summernote
    └── private
        ├── ping-monitor
        └── qd
    
    それで、私はシェルでスクリプトをペーストしました、そして、それはこのファイルを生成しましたclone-all.sh :
    ➜  cat clone-all.sh           
    mkdir -p ./other/bitmovin-ruby
    git clone [email protected]:bitmovin/bitmovin-ruby.git ./other/bitmovin-ruby
    git --git-dir=./other/bitmovin-ruby/.git remote add fork [email protected]:douglaslise/bitmovin-ruby.git
    
    mkdir -p ./other/audited_views
    git clone [email protected]:douglaslise/audited_views.git ./other/audited_views
    
    mkdir -p ./other/cucumber-ruby
    git clone [email protected]:cucumber/cucumber-ruby.git ./other/cucumber-ruby
    
    mkdir -p ./other/rubocop
    git clone [email protected]:rubocop-hq/rubocop ./other/rubocop
    
    mkdir -p ./other/gitlab-ci-monitor
    git clone [email protected]:globocom/gitlab-ci-monitor.git ./other/gitlab-ci-monitor
    git --git-dir=./other/gitlab-ci-monitor/.git remote add fork [email protected]:douglaslise/gitlab-ci-monitor.git
    
    mkdir -p ./other/summernote
    git clone [email protected]:summernote/summernote.git ./other/summernote
    
    mkdir -p ./other/devise-i18n
    git clone [email protected]:tigrish/devise-i18n.git ./other/devise-i18n
    git --git-dir=./other/devise-i18n/.git remote add fork [email protected]:douglaslise/devise-i18n.git
    
    mkdir -p ./other/douglaslise.github.io
    git clone [email protected]:douglaslise/douglaslise.github.io.git ./other/douglaslise.github.io
    
    mkdir -p ./other/sendgrid-ruby
    git clone [email protected]:sendgrid/sendgrid-ruby.git ./other/sendgrid-ruby
    git --git-dir=./other/sendgrid-ruby/.git remote add fork [email protected]:douglaslise/sendgrid-ruby.git
    
    mkdir -p ./private/ping-monitor
    git clone ssh://[email protected]/douglaslise/ping-monitor ./private/ping-monitor
    git --git-dir=./private/ping-monitor/.git remote add heroku https://git.heroku.com/pingmonitor.git
    
    mkdir -p ./private/qd
    git clone ssh://[email protected]/douglaslise/qd ./private/qd
    ➜   
    
    次に、生成したファイルを新しいコンピュータにコピーし、すべてのリポジトリをクローン化したいベースフォルダで実行しました.
    pwd
    /home/douglas-new/code
    
    ➜  ls
    clone-all.sh
    
    ➜  sh clone-all.sh
    Cloning into './other/bitmovin-ruby'...
    remote: Enumerating objects: 56, done.
    remote: Counting objects: 100% (56/56), done.
    remote: Compressing objects: 100% (43/43), done.
    remote: Total 1707 (delta 21), reused 33 (delta 10), pack-reused 1651
    Receiving objects: 100% (1707/1707), 245.62 KiB | 1.00 MiB/s, done.
    Resolving deltas: 100% (1051/1051), done.
    
    Cloning into './other/audited_views'...
    remote: Enumerating objects: 314, done.
    remote: Total 314 (delta 0), reused 0 (delta 0), pack-reused 314
    Receiving objects: 100% (314/314), 48.93 KiB | 331.00 KiB/s, done.
    Resolving deltas: 100% (81/81), done.
    
    Cloning into './other/cucumber-ruby'...
    remote: Enumerating objects: 371, done.
    remote: Counting objects: 100% (371/371), done.
    remote: Compressing objects: 100% (203/203), done.
    remote: Total 58832 (delta 227), reused 264 (delta 163), pack-reused 58461
    Receiving objects: 100% (58832/58832), 11.76 MiB | 4.73 MiB/s, done.
    Resolving deltas: 100% (40075/40075), done.
    
    Cloning into './other/rubocop'...
    remote: Enumerating objects: 11, done.
    remote: Counting objects: 100% (11/11), done.
    remote: Compressing objects: 100% (11/11), done.
    remote: Total 90142 (delta 0), reused 2 (delta 0), pack-reused 90131
    Receiving objects: 100% (90142/90142), 29.81 MiB | 4.98 MiB/s, done.
    Resolving deltas: 100% (68283/68283), done.
    
    Cloning into './other/gitlab-ci-monitor'...
    remote: Enumerating objects: 14, done.
    remote: Counting objects: 100% (14/14), done.
    remote: Compressing objects: 100% (13/13), done.
    remote: Total 390 (delta 3), reused 3 (delta 0), pack-reused 376
    Receiving objects: 100% (390/390), 471.38 KiB | 1.36 MiB/s, done.
    Resolving deltas: 100% (210/210), done.
    
    Cloning into './other/summernote'...
    remote: Enumerating objects: 41, done.
    remote: Counting objects: 100% (41/41), done.
    remote: Compressing objects: 100% (36/36), done.
    remote: Total 21101 (delta 21), reused 11 (delta 5), pack-reused 21060
    Receiving objects: 100% (21101/21101), 13.13 MiB | 4.58 MiB/s, done.
    Resolving deltas: 100% (13576/13576), done.
    
    Cloning into './other/devise-i18n'...
    remote: Enumerating objects: 114, done.
    remote: Counting objects: 100% (114/114), done.
    remote: Compressing objects: 100% (79/79), done.
    remote: Total 4852 (delta 45), reused 56 (delta 19), pack-reused 4738
    Receiving objects: 100% (4852/4852), 1.33 MiB | 2.81 MiB/s, done.
    Resolving deltas: 100% (2928/2928), done.
    
    Cloning into './other/douglaslise.github.io'...
    remote: Enumerating objects: 463, done.
    remote: Total 463 (delta 0), reused 0 (delta 0), pack-reused 463
    Receiving objects: 100% (463/463), 4.46 MiB | 3.07 MiB/s, done.
    Resolving deltas: 100% (92/92), done.
    
    Cloning into './other/sendgrid-ruby'...
    remote: Enumerating objects: 23, done.
    remote: Counting objects: 100% (23/23), done.
    remote: Compressing objects: 100% (17/17), done.
    remote: Total 2861 (delta 7), reused 14 (delta 4), pack-reused 2838
    Receiving objects: 100% (2861/2861), 680.79 KiB | 1.60 MiB/s, done.
    Resolving deltas: 100% (1313/1313), done.
    
    Cloning into './private/ping-monitor'...
    remote: Counting objects: 490, done.
    remote: Compressing objects: 100% (436/436), done.
    remote: Total 490 (delta 256), reused 75 (delta 25)
    Receiving objects: 100% (490/490), 72.60 KiB | 352.00 KiB/s, done.
    Resolving deltas: 100% (256/256), done.
    
    Cloning into './private/qd'...
    remote: Counting objects: 632, done.
    remote: Compressing objects: 100% (418/418), done.
    remote: Total 632 (delta 288), reused 332 (delta 128)
    Receiving objects: 100% (632/632), 151.00 KiB | 322.00 KiB/s, done.
    Resolving deltas: 100% (288/288), done.
    
    ここで新しく作成された構造を見ることができます.
    ➜  tree -L 2
    .
    ├── clone-all.sh
    ├── other
    │   ├── audited_views
    │   ├── bitmovin-ruby
    │   ├── cucumber-ruby
    │   ├── devise-i18n
    │   ├── douglaslise.github.io
    │   ├── gitlab-ci-monitor
    │   ├── rubocop
    │   ├── sendgrid-ruby
    │   └── summernote
    └── private
        ├── ping-monitor
        └── qd
    

    結論
    これは、すべてのファイルやフォルダをコピーする必要がなく、ユニークな、小さなファイルをコピーするだけで、すべてのプロジェクトをクローン化するために使用することができます.
    あなたが提案をするならば、コメントで私に知らせてください.
    ありがとう.