5
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 1 year has passed since last update.

GitLabのプロジェクトをGitHubのリポジトリへ移行してみた

Last updated at Posted at 2024-03-17

はじめに

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側にソースを移行できました。

image.png

◆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でそれぞれトークンの発行が必要になります。

発行されたトークンを忘れないように保管しておいてください。

  • GitLab

Edit Profile > Access Tokens > Add new Token から読み取り専用のトークンを発行します。

image.png

  • GitHub

GitHub側もパーソナルアクセストークンを発行します。
repoにチェックを入れてアクセストークンを作成します。

image.png

スクリプトの編集

以下のコマンドでsample_settings.ts元に、settings.tsを作成します。

cp sample_settings.ts settings.ts

settings.tsが作成出来たら内容を編集していきます。

  • GitLab

token:先ほど発行したGitLabのトークン
projectId:nullで設定しておきます。(※後で書き換えます)
urllistArchivedProjectssessionCookie:デフォルトのままにしておきます。詳細はドキュメントを参照ください。

  • GitHub

owner:githubのユーザ名(@から始まる方)
token:先ほど発行したGitHubのトークン
token_owner:トークンを発行したGitHubのユーザ名
repo:リポジトリの名前
usermap:使用するGitLabのユーザ名、GitHubのユーザ名
projectmap:GitLabのプロジェクト名、 GitHubのリポジトリ名
baseUrlapiUrlownerIsOrgrecreateRepo:デフォルトのままにしておきます。詳細はドキュメントを参照ください。

  • ドキュメント

settings.ts
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が追加されている事を確認できます。

image.png

5
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
5
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?