Remote Repository ManagerのMigrateを使う

バルク(一括)Migrateすることで散在しているRemote Repositoryを一カ所にまとめる

拙作のユーティリティRemote Repository Manager(略して以下rrm)では、GiteaのMigrate APIを利用することで、種々のサーバに存在しているRemote Repositoryを移行(Gitea日本語訳での用語)できます。ただし、若干の制限があって、BitbucketからのrepositoryはうまくAPI経由では移行できません。手動でgit cloneコマンドを使うことでできますが、この方法は後で述べます。Githubも同様なMigrate APIがありました。GithubではImportと呼んでいましたが、APIが廃止されましたから、今では使えません。各プラットフォーム間でのAPIによるMigrateの可能性を図にすると以下のようになります。

上図はあくまでAPIを叩いてできる”移行”なので、他の手段でもできなくはないです。ただし、“一括”は難しいので、面倒くさがりさん(筆者も含む)は苦労するわけです。さて、受け入れられる範囲がかなり広いのがGiteaであることは明白です。たぶんGiteaが一番後発なので、他のプラットフォームからの移行を積極的にサポートしてきた経緯があると思います。さてrrmで一括移行にトライしてみましょうかね。rrmを起動して、local ip 147(つまり192.168.0.147)のGiteaのレポジトリのlistを取ります。

ここで、左の上の方の“SelectAll”なるチェックボックスをクリックして、全レポジトリを選択、

この状態で一番上の方の右にあるComboBox2から移行先のサーバーを選択。ここでは万能受け皿なGitea 240(192.168.0.240)を選択。240には最新のGitea 28.1.0を入れてあります。

Migrate中のショット。100個以上のリポジトリの移行なので、いくらLAN->LANといえどもそれなりに時間はかかります。ファイル数とかも含めて大きいレポジトリでも10秒程度でした。

上図は移行先のGitea 240でのレポジトリリストです。emptyなレポジトリも含めてちゃんと移行されています。Bashスクリプトで書けそうですよね。

同様な繰り返しで、他のサーバー(bitbucketやらGitHubやらGitLab)からの移行もできますけど。同名のレポジトリが存在する場合は、頭(prefix)にサーバー種別を追加するようにしてあります。最初からprefixを付けるかどうか選択できるバージョンは現在制作中なので、説明書もupdateした上で最終版として近々にダウンロードできるようにする予定です。

Bitbucketからの移行は、別記事で。さて、まとめです。Web-uiからの下記画面

ここ経由で移行できますけど、1個ごとになります。総計5個くらいなら耐えられますけど、100個ではね…..。筆者は耐えられませんので、Gitea API内にMigrateという機能を見つけた時からrrmに実装しています。LAN内のサーバ間の移行や、外界(WANともいふ)からの移行を可能にするためには、giteaの設定ファイルapp.iniに以下の項が必要です。gitea 240の設定ファイルは、/etc/gitea/app.iniですが、

[migrations]
ALLOW_LOCALNETWORKS = true
ALLOWED_DOMAINS = api.github.com,github.com,gitlab.com,gitea.com

等と設定する必要があります。言い忘れましたが、giteaのバージョンが違う場合は、dbとレポジトリディレクトリを移行することができず、つまりサーバー全体を移行することは通常困難ですから、古いgiteaから最新の28.1.0へまとめて移行するのはRRMを使うしか方法がありません。公式のgitea dumpはコマンドで可能ですが、restoreのコマンドがないし、手動でretoreするのは筆者がトライした範囲ではできませんでした。

コメント