Help us understand the problem. What is going on with this article?

GitLabからGitHubへの移行

はじめに

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は転送失敗してますけど...。(おそらく、マージしたらブランチを消す運用なので、今ブランチが存在しないから転送失敗してるのだと思います。

showcase-tv
Webサイト最適化技術により成約率を高める「ナビキャストシリーズ」の提供および、DMPを活用したWebマーケティング支援
https://www.showcase-tv.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした