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

GitlabからGitHubにリポジトリを移行する時にやったこと

More than 3 years have passed since last update.

会社の開発メンバーやリポジトリ数、コミット数が増えてきたおかげもあって、インストールして使っていたGitlabが重くなりやすくなってきて効率を落としていたので、今年に入ってGitHubへ移行を実施しました。その時に実施した作業を簡単にまとめます。(既出かもしれませんが...)

mirrorオプションでブランチも含めて一括で移行

よく紹介されている方法としては以下のようなものです。

git clone ssh://git@gitlab.xxx.com/hoge/repo.git
cd repo
git remote set-url origin ssh://git@github.com/hoge/repo.git
git push origin --all

この方法でも大体の移行はできますが、ローカルに落としていないbranchやtagなどを移行することはできなかったので、以下の手段に切り替えました。

git clone --mirror ssh://git@gitlab.xxx.com/hoge/repo.git
cd repo.git
git remote add --mirror=push github ssh://git@github.com/hoge/repo.git
git push github

こうすることで、ローカルにブランチを落とすことなく移動することができます。

データ容量エラーへの対応

ここからは特定のプラットフォームへの移行に限定される話かもしれませんが、GitHubに対して移行をする場合、100MB以上のファイルのコミット歴があるリポジトリ/ブランチをpushしようとすると以下のようなエラーとなります。

remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.

エラーメッセージにちゃっかり宣伝入ってますw

現存するものには、この大きさのファイルがなかったので、Manually reviewing large files in your repository にある git_find_big.sh を使って、大きいファイルを調査します。(1. の「Download the script」リンクから落とすことができます)

git_find_big.sh を調べる対象のリポジトリ直下に置いたら、実行します。(本当はSHAなどもう少し長いです)

$ sh git_find_big.sh
All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
-e      size   pack      SHA         location
769396  86216
1018364 15570  abcdefgh  dump.sql
996     344
780     158    bcdefghi  hoge/fuga.php
........

実際、100MB以上のファイルのコミット履歴が残っている場合、大抵そのファイルは使ってなくて、誤ってcommitされていることが多いかと思います。(私の場合も、上記の例のようにマスキングDBのdumpファイルがコミットされたために、pushが通りませんでした)

その場合は、履歴をなかったことにして対応することができます。(歴史を書き換える危険な作業なので、バックアップを取ってから実行されることをお勧めします)

git clone ssh://git@gitlab.xxx.com/hoge/repo.git
cd repo

git filter-branch --index-filter "git rm -r --cached --ignore-unmatch dump.sql" -- --all

git push origin --all --force

例として、dump.sqlのコミット履歴を抹消しています。この操作を、大容量ファイル全てに対して実行したら、pushすることができます。

slogan
人を軸にした新産業創出エコシステムをつくるグロースヒューマンキャピタル。「Goodfind」を運営。
http://www.goodfind.jp
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