» TechAcademyの無料体験

GitLabからGitHubへの移行を行う

GitLabからGitHubへの移行を行うGit

GitLabにあるリポジトリをGitHubに移行する機会があったので、その時に実施した手順を記事としてまとめました。

GitLabからGitHubへの移行を行う手順

GitLabからGitHubへの移行を順を追って実施していきます。

手順としては、以下のように進めていきます。

  1. GitHubに空リポジトリを作成する
  2. ソースコードおよび変更履歴を移行する
  3. MRやIssueを移行する

GitHubに空リポジトリを作成する

まず、GitHubに空リポジトリを作成します。Ownerおよび公開範囲等は任意で指定。

個人でしか使わないリポジトリであれば、チームメンバーの紐付けは行う必要はありませんが、他の方も使う場合は、「Settings」の「Manage access」で権限設定を行っておきます。

ソースコードおよび変更履歴を移行する

空リポジトリをGithub上に作成した後は、cloneとpushを行い、ソースコードおよび変更履歴をGitHubへ移行します。

# ミラーリポジトリとしてGitLabの移行対象リポジトリをクローンする
$ git clone --mirror git@your-gitlab-site.com:username/repo.git
# 上記実施後、repo.gitディレクトリが出来るのでそちらに移動
$ cd repo.git
# pre-commitを無視して、GitHubへpush(ローカルの内容をそのままリモートに複製している)
$ git push --no-verify --mirror git@github.com:username/repo.git

これでGitHubにはソースコードや変更履歴が反映されているはずです。

念の為、デフォルトブランチを確認しておきましょう。pushした時にデフォルトブランチがGitLabで設定していたものと違う場合があるので。

確認方法としては、「Settings」→「Branches」に移動すると「Default Branch」があるので、そちらに記載されているブランチがデフォルトのブランチになっています。

次に、リポジトリのアップストリームURLを変更します。

# アップストリームURLを確認すると、GitLabのURLになっていることを確認
$ git remote -v
# アップストリームURLをGitHubのURLに設定
$ git remote set-url origin git@github.com:username/repo.git
# アップストリームURLがGitHubのURLになっていることを確認
$ git remote -v

MRやIssueを移行する

ソースコードや変更履歴はGitHub側に移行することができましたが、まだMRやIssueに関しては移行することが出来ていません。

そこで、https://github.com/piceaTech/node-gitlab-2-github を使ってMRやIssueの移行を進めていきます。

まず、事前準備としてGitLabの読み取り用トークンと、GitHubの書き込み用トークンを用意しておきます。

GitLab側に関しては、こちら https://gitlab.com/profile/personal_access_tokens から、Nameを「node-gitlab-2-github」とかにしておいて、Expired atも適当につけておきます。指定する権限に関しては、「api」と「read_repository」を指定します。

GitHub側に関しては、こちら https://github.com/settings/tokens から、Noteを「node-gitlab-2-github」とかにしておきます。指定する権限に関しては、「repo」を指定します。

それぞれトークンを忘れないように控えておきましょう。

ここまでの準備が済んだら、node-gitlab-2-githubを使い、MRやIssueの移設を行っていきます。

# node-gitlab-2-githubをクローン
$ git clone https://github.com/piceaTech/node-gitlab-2-github.git
$ cd node-gitlab-2-github
$ npm install
$ cp sample_settings.ts settings.ts

続いて、settings.tsファイルを編集していきます。

import Settings from './src/settings';

export default {
  gitlab: {
    url: '{{ https://gitlab.mycompany.com }}',
    token: '{{ GitLabで先ほど発行したトークン }}',
    projectId: null,
  },
  github: {
    owner: '{{ repository owner (user or organization) }}',
    token: '{{ GitHubで先ほど発行したトークン }}',
    repo: '{{ GitHub側のリポジトリ名 }}',
  },
  usermap: {
    '{{ GitLab側のユーザー名(user1) }}': '{{ GitHub側のユーザー名(user1) }}',
    '{{ GitLab側のユーザー名(user2) }}': '{{ GitHub側のユーザー名(user2) }}',
  },
  projectmap: {
  },
  conversion: {
    useLowerCaseLabels: true,
  },
  transfer: {
    milestones: true,
    labels: true,
    issues: true,
    mergeRequests: true,
  },
  debug: false,
  usePlaceholderIssuesForMissingIssues: true,
  useReplacementIssuesForCreationFails: true,
  useIssuesForAllMergeRequests: false,
  filterByLabel: null,
  skipMatchingComments: [],
  mergeRequests: {
    logFile: './merge-requests.json',
    log: false,
  },
} as Settings;

settings.tsを上記のように編集し終えたら、一度プロジェクトを実行します。プロジェクトを実行するとリポジトリIDとリポジトリ名が表示されるので、リポジトリIDを控えておきます。

$ npm start

その後、settigs.tsのprojectIdに先ほど控えたリポジトリIDを設定。

import Settings from './src/settings';

export default {
  gitlab: {
    url: '{{ https://gitlab.mycompany.com }}',
    token: '{{ GitLabで先ほど発行したトークン }}',
    projectId: {{ リポジトリID }},
  },

リポジトリIDを設定し終えたら、プロジェクトを再実行します。

$ npm start

上記が上手くいけば、MRやIssueがGitHubに移行されています。

他のリポジトリも移設したい場合は、projectIdとgithub側のrepo名を変更してあげて、プロジェクトを実行してあげるとMRおよびIssueを移行することが出来ます。

GitHubへの移行が完了し、fetchやpush等が問題なく行えるか確認することが出来たら、GitLabのリポジトリは削除しておきましょう!

コメント

タイトルとURLをコピーしました