はじめに
GitLabからGithubへリポジトリの移行を検討しました。
gitコマンドのみだとブランチとソースはGitHub側へ移動できますが、
IssueはGitHub側へ持っていくことができなそうでした。
よって、node-gitlab-2-githubを使用しIssueの履歴までGitHubへ移行を実施しました。
本記事はGitLabの資産(ソース、ブランチ、コミット履歴、Issue)をGitHubへ移行する際に実施した手順についてまとめたものです。
前提
GitLabのグループ内におけるプロジェクトを
GitHubのorganizaiton内へ移動することを想定しています。
環境
- vscode
- poewrshell
◆ブランチとソースの移行
移行するリポジトリを次のコマンドでローカルにクローンする。
git clone --mirror URL
git cloneできないとき
gitlabのプロジェクトをクローンすると、503などのエラーが出る時があります。
プロキシの設定回りが怪しいので、.gitcofigファイル等の設定を確認してみてください。
リモートリポジトリにgitlabのプロジェクトが登録されている状態なので、
プッシュ先のリモートリポジトリを変更したい。
リモートリポジトリの変更前に念のため、現在のリモートリポジトリを確認します。
git remote -v
移行先のGitHub側の空リポジトリを作成し、次のコマンドでプッシュ先のリモートリポジトリをGitHubのリモートリポジトリに変更する。
git remote set-url --push origin URL
以下のコマンドでpush先がGitHub側のリモートリポジトリに変更されたことを確認します。
git remote -v
問題なければ下記コマンドでリモートリポジトリにpushします。
git push --mirror
リモートリポジトリをブラウザで確認し更新されている事を確認します。
GitLab側のブランチ情報も含めてGitHub側にソースを移行できました。
◆Issueを移行する
移行においては下記のOSSを使用します。
こちらのツールを使用することでGitLabのプロジェクトにおけるIssueの履歴をGitHub側に移行できます。
インストール
ドキュメントに記載されている通り下記コマンドでリポジトリをクローンし、
階層を移動した後に、必要なパッケージをインストールします。
git clone https://github.com/piceaTech/node-gitlab-2-github.git
cd node-gitlab-2-github
npm i
トークンの発行
ツールの使用においてGitLab、GitHubでそれぞれトークンの発行が必要になります。
発行されたトークンを忘れないように保管しておいてください。
Edit Profile > Access Tokens > Add new Token から読み取り専用のトークンを発行します。
GitHub側もパーソナルアクセストークンを発行します。
repo
にチェックを入れてアクセストークンを作成します。
スクリプトの編集
以下のコマンドでsample_settings.ts
元に、settings.ts
を作成します。
cp sample_settings.ts settings.ts
settings.ts
が作成出来たら内容を編集していきます。
token
:先ほど発行したGitLabのトークン
projectId
:nullで設定しておきます。(※後で書き換えます)
url
、listArchivedProjects
、sessionCookie
:デフォルトのままにしておきます。詳細はドキュメントを参照ください。
owner
:githubのユーザ名(@から始まる方)
token
:先ほど発行したGitHubのトークン
token_owner
:トークンを発行したGitHubのユーザ名
repo
:リポジトリの名前
usermap
:使用するGitLabのユーザ名、GitHubのユーザ名
projectmap
:GitLabのプロジェクト名、 GitHubのリポジトリ名
baseUrl
、apiUrl
、ownerIsOrg
、recreateRepo
:デフォルトのままにしておきます。詳細はドキュメントを参照ください。
- ドキュメント
import Settings from './src/settings';
export default {
gitlab: {
// url: 'https://gitlab.mycompany.com',
token: '発行したトークン(GitLab)',
projectId: null,
listArchivedProjects: true,
sessionCookie: "",
},
github: {
// baseUrl: 'https://github.mycompany.com:123/etc',
// apiUrl: 'https://api.github.mycompany.com',
owner: 'organization名',
ownerIsOrg: true,
token: '発行したトークン(GitHub)',
token_owner: 'トークンを発行したユーザ名',
repo: 'gitlab_github_test',
recreateRepo: false,
},
usermap: {
'GitLabのユーザ名': 'GitHubのユーザ名',
},
projectmap: {
'GitLabのリポジトリ名': 'GitHubのリポジトリ名',
},
//~~~
} as Settings;
ここまで設定出来たら下記コマンドでスクリプトを実行します。
npm run start
問題なく実行できれば下記のようにプロジェクトID等が出力されます。
・・・
プロジェクトID プロジェクト名 -- null
プロジェクトID プロジェクト名 -- null
プロジェクトID プロジェクト名 -- null
・・・
settings.ts
ファイルにおいて、先ほどnull
を指定したprojectId:null
部分を修正します。
null
部分を表示されたプロジェクトIDに変更します。
export default {
gitlab: {
//~~~
projectId: プロジェクトID,
//~~~
},
この状態で再度次のコマンドでスクリプトを実行します。
npm run start
問題なく実行できていれば、私の場合最後にTransfer complete!
が表示されました。
参考になるか分かりませんが、readmeしかないプロジェクトの移行では1分ほどで終わりました。
Transfer complete!
GitHub側のリポジトリを確認すると、issues
が追加されている事を確認できます。