0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

remote repositoryのすべてのbranchをpullする(on Windows)

Last updated at Posted at 2020-08-12

はじめに

仕事でgitのSaaSから、異なるgitのSaaSへ移行を行いました。
その際に、remote repositoryのすべてのbranchをpullする必要がありました。

Mac上でやっている例はすぐに見つかるので、参考にさせて頂いてWindows(powershell)上で実現しました。

参考

以下のサイトを参考にさせて頂きました。ありがとうございます。

全ブランチをリモートリポジトリからpullする
Git のトラッキングブランチの確認と設定方法

環境

  • Windows 10
  • git 2.28.0
  • VS Code
  • Powershell

手順

  • リモートリポジトリからcloneする
  • 全branchをpullするスクリプトを流す
  • git remote addする
  • 全branchをpushするスクリプトを流す

リモートリポジトリからcloneする

はい、リモートリポジトリからcloneしてください。

git_clone
git clone <old remote repository>

リポジトリがたくさんある場合は、ここもスクリプトでやったほうがよさそうです。

全branchをpullするスクリプトを流す

pull_all
$repos = @(
  "C:\...\repo1",
  "C:\...\repo2",
  "C:\...\repo3"
)

foreach ($r in $repos) {
  Set-Location $r
  $branches = git branch -r

  foreach ($b in $branches) {
    $b = $b.Trim().Split(' ')
    $branch = $b[$b.length - 1]
    $local_branch = $branch.Replace('origin/', '')
    $remote_branch = $branch

    git branch $local_branch $remote_branch
  }

  git fetch --all
  git pull --all
}

リポジトリがたくさんある方は、$reposを編集してください。
進捗が気になる方は必要に応じてメッセージを挿入してください。

git remote addする

この作業の前にremote repositoryを作っておいてください。
remote repositoryのURLがわからないと、remote addできません。

cloneして、全branchをpullしたlocal repositoryにcdして、remote repositoryを設定します。
remote repositoryのURLがlocal repository名から判別できる場合、前述のスクリプトに組み込んだほうが間違いがないです。
私は移行元のSaaSが複数あったり、repository名の変更があったので手動で行いました。
ここを間違えると、repositoryの紐づけがくるってしまうので慎重に。

git_remote_add
git remote add aws <new remote repository>

例ではawsという名前のremote repositoryをaddしています。
この時は、AWS CodeCommitにpushしました。皆さんの状況に合わせてわかりやすい名前にしてください。
repositoryの紐づけがわからなくなってしまうので、originを上書きしちゃダメ絶対です。

全branchをpushするスクリプトを流す

ここまで来たら、pushするだけです。

pull_all
$repos = @(
  "C:\...\repo1",
  "C:\...\repo2",
  "C:\...\repo3"
)

foreach ($r in $repos) {
  Set-Location $r
  $branches = git branch

  foreach ($b in $branches) {
    $b = $b.Trim().Split(' ')
    $branch = $b[$b.length - 1]

    git push aws $branch
  }
}

remote repositoryの名前をawsから変更した方は、下から3行目のawsを適宜変更してください。

まとめ

branchが50個ぐらいあると、手動移行だと殉職するなーと思いましたが、殉職せずに楽しく移行することが出来ました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?