1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

bitbucketリポジトリから100MBを超えるファイルをLFS対応してgithubに引越しする

Posted at

https://bitbucket.org/ で 100MB を超える大きなファイルを
そのまま git に commit するやんちゃな運用をしていたリポジトリを
https://github.com/ に移設するため LFS 対応したときの手順です。

Bitbucket とは異なり、Github は1ファイルあたり100MBの制限があるので、
巨大なファイルを格納していたリポジトリを引越す場合は、 LFS を利用する必要があります。

手順は以下の通り。

# macOS の場合
brew install git-lfs

# 全体設定で Git LFS を有効化
git lfs install

# リポジトリ名
REPO=my-repository
ORG=my-github-organization

# 事前に clone しておいたローカルのリポジトリに移動する
cd $REPO

# github を remote に登録する
git remote add github git@github.com:$ORG/$REPO.git

# 10MB 以上の大きなファイルを探す
git rev-list --objects --all \
  | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
  | awk '$1 == "blob" && $3 > 10000000 { print $3, $4 }'  | sort -rn | head

# もし、100MB 以上のファイルがなければ、LFS 化も必須ではないから、そのまま mirror して終了
# git gc && git push github --all  && git push github --tags

# LFS 対象のファイル名を指定する(例:すべての *.zip を LFS 化することにした場合)
NAME="*.zip"

# ① 初めて .zip ファイルを含んでいる最初のコミットを探す
FIRST=$(git log --diff-filter=A --reverse --pretty=format:%H -- "$NAME" | head -n 1)
echo FIRST=$FIRST

# ② その1つ前のコミット
PARENT=$(git rev-parse $FIRST^)
echo PARENT=$PARENT

# ② → ①のコミットログを確認する
git log $PARENT^..$FIRST

# ② → ①のときに変更されたファイル名を確認する
git diff --name-only $PARENT $FIRST

# ①以降のコミットをすべて書き換えて、履歴中の全ての .zip ファイルを LFS 化する(コミットIDが変わる)
git lfs migrate import --include="$NAME" --exclude-ref=$PARENT --include-ref=HEAD

# もし、①がルートコミット(親がないコミット)だった場合は、全コミットに対して .zip の LFS 化を実行する
# git lfs migrate import --include="$NAME" --everything

# LFS 化したファイルを確認する
git lfs ls-files --all --size

# github に push する
git gc && git push github --all  && git push github --tags

(備考)

  • --everything だと、全てのコミットのコミット ID が変わる。
  • --exclude-ref=$PARENT を使えば $FIRST 以降のコミット ID だけが変わる。
  • 上記手順で bitbucket → github 移設できるようになったものの、そもそも、100MB を超えるファイルを git で扱うと、ローカルの端末のディスク容量も大きく消費してしまうから、できれば、そうした運用は避けたい。(今回は、昔に作ったリポジトリのアーカイブを移設していました)

(参考)GitHub と Bitbucket の比較(2025年6月現在)

項目 GitHub Bitbucket
Free プラン ◯ あり ◯ あり
安い有料プランの月額料金 △ 1人あたり$4.00 △ 1人あたり$3.30
有料プランの最低月額料金 ◯ $4.00(1人分〜) ◯ $16.50(5人分〜)
1ファイルあたりの制限 ファイルあたり100MB ◯ 制限なし
Free プランの容量制限 ◯ 制限なし? Workspaceあたり1GB
有料プランの容量制限 ◯ 制限なし? ◯ 制限なし?
Free プランのLFS容量制限 ◯ 10GB △ 1GB
安い有料プランのLFS容量制限 ◯ 250GB △ 5GB
LFS容量の追加購入 ◯ 1GB あたり $0.07 △ 100GB あたり $10.00
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?