はじめに
仕事で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 <old remote repository>
リポジトリがたくさんある場合は、ここもスクリプトでやったほうがよさそうです。
全branchをpullするスクリプトを流す
$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 aws <new remote repository>
例ではawsという名前のremote repositoryをaddしています。
この時は、AWS CodeCommit
にpushしました。皆さんの状況に合わせてわかりやすい名前にしてください。
repositoryの紐づけがわからなくなってしまうので、originを上書きしちゃダメ絶対です。
全branchをpushするスクリプトを流す
ここまで来たら、pushするだけです。
$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個ぐらいあると、手動移行だと殉職するなーと思いましたが、殉職せずに楽しく移行することが出来ました。