44
36

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.

GitLabからGitHubへの移行

Last updated at Posted at 2019-09-11

はじめに

GitLabからGitHubへの移行に関して、まとまった記事があまりないなあと思ったのでまとめました。編集リクエストお待ちしています。

前提

移行元のGitLabのリポジトリは https://gitlab.mycompany.com/hoge/fuga とする。
移行先のGitHubリポジトリは空のリポジトリを作成していて、 https://github.com/hoge2/fuga2 とする。

移行手順

ソースコードの移行(ブランチ、タグ含む)

CUIでの方法

CUIでGitLabから--mirrorオプションをつけてcloneし、--mirrorオプションをつけてremoteリポジトリとして移行先を登録する(ここではgithubという名前で登録しています)

% cd {WORKDIR}
% git clone --mirror https://gitlab.mycompany.com/hoge/fuga
% cd fuga.git/
% git remote add --mirror=push {適当なshortname} ssh://git@github.com/hoge2/fuga2.git
% git push {適当なshortname}

GUIでの方法

GitLabのミラーリング機能を使う。この方法だと、GitHubとGitLabがミラーリングできるので、タイミングを図らなくても移行できる。ミラーリングを切ってもコードはGitHubにはそのまま残るが、GitLabへの変更は同期されない。

  1. GitHub のアクセストークンを取得する
  2. GitLabのリポジトリページ( https://gitlab.mycompany.com/hoge/fuga )から、Settings > Repository > Mirroring repositories を開く
  3. Git repository URLhttps://{nishioka_github_username}@github.com/hoge2/fuga2を入力
  4. Mirror directionPushAuthentication methodPasswordを選択
  5. Passwordに GitHub の Access Token を入力
  6. Mirror Repositoryを押す
  7. Mirrored repositoriesに先ほどの入力内容が反映され、正常にミラーリングされていることを確認する

Wikiの移行

移行先のリポジトリで適当に1つwikiのページを作っておく。

ソースコードの場合と同様にCUIでGitLabからcloneし、remoteリポジトリとして移行先を登録する。この時、「.wiki」をつけること(下記参照)。

% cd {WORKDIR}
% git clone --mirror https://gitlab.mycompany.com/hoge/fuga.wiki
% cd fuga.wiki.git/
% git remote add --mirror=push {適当なshortname} ssh://git@github.com/hoge2/fuga2.wiki.git
% git push {適当なshortname}

Milestone, Label, MergeRequest, Issueの移行

node-gitlab-2-githubというツールを使う。手順は下記参照のこと。

参考: GitLab の Issue を GitHub に移行する node.js スクリプトを試す

Access Token の取得

GitHub と GitLab 双方のアクセストークンを取得する。

設定ファイルの編集

% cp sample_settings.js settings.js
% vi settings.js
settings.js
module.exports = {
  gitlab: {
    url: 'https://gitlab.mycompany.com',
    token: 'XXXXXXXXXXXXXXXXXXX',
    projectId: null, // 初回はnullのままにしておく
  },
  github: {
    owner: 'hoge2',
    token: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    repo: 'fuga2',
  },
  usermap: {
    'nishioka_gitlab_username': 'nishioka_github_username',
  },
  projectmap: {
    'hoge/fuga': 'hoge2/fuga2',
  },
  conversion: {
    useLowerCaseLabels: true,
  },
  debug: false,
  mergeRequests: {
    logFile: './merge-requests.json',
    log: false,
  },
};

projectId: nullのままでnpm run start実行すると、以下の様にプロジェクトID一覧が表示される。

 ...
511 	 XXXXXXXXXX	--	 XXXXXXXXXX
489 	 fuga 	--	 # 移行したいリポジトリ
480 	 XXXXXXXXXX 	--	 XXXXXXXXXX
476 	 XXXXXXXXXX 	--
 ...

settings.jsonに反映。

settings.js
module.exports = {
  gitlab: {
    url: 'https://gitlab.mycompany.com',
    token: 'XXXXXXXXXXXXXXXXXXX',
    projectId: 489, // 移行したいリポジトリのプロジェクトIDをセット
  },
  ...
};

実行結果

npm run start実行すると、以下の様に転送ができます。

==================================
Transferring Milestones
==================================
  ... (略)
==================================
Transferring Labels
==================================
Creating: バグ
Creating: レビュー依頼
Creating: 保留
Creating: 優先度中
  ... (略)
==================================
Transferring Issues
==================================
Transferring 2 issues
Creating: 1 - Data Augmentation
Creating: 2 - no requiremenrs.txt
  ... (略)
==================================
Transferring Merge Requests
==================================
Transferring 2 merge requests
Creating pull request: !1 - add requirements.txt
Merge request !1, source branch: develop-nishioka does not exist
Thus, cannot migrate merge request; creating an issue instead
Creating pull request: !2 - add requirements.txt
Merge request !2, source branch: develop-nishioka does not exist
Thus, cannot migrate merge request; creating an issue instead
  ... (略)


Transfer complete!

今回の例ではMerge Requestは転送失敗してますけど...。(おそらく、マージしたらブランチを消す運用なので、今ブランチが存在しないから転送失敗してるのだと思います。

44
36
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
44
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?