なうびるどいんぐ

脳みそ常時-3dB

[Git]LFSを含むリポジトリを移行する

      2017/09/19    HimaJyun

Gitは良いですわぞ~、サーバを移行したいと思ったら--mirrorでcloneして--mirrorでpushするだけ!!

……じゃあ、リポジトリがGitLFSを使ってるとどうするの?

スポンサーリンク

リポジトリの移動

例えばサーバを変えた、使うサービスを変えたなどで既存のGitのリポジトリをまるっと全部移行するのは簡単です。

mirrorを付けてclone、pushをするだけで全ての歴史がそっくりそのまま他のリポジトリへと移されます。

git clone --mirror https://example.jp/old.git
cd old.git
git push --mirror https://example.jp/new.git

じゃあ、そのリポジトリがLFSファイルを持っていた場合はどうなるの?

LFSの移行

説明の必要はないかと思いますが、LFSはGitそのものとは別の場所に実体を保存します。

と、言う事はgit cloneでmirrorしても実体は移行できていない、という訳です。

でも大丈夫、きちんとlfsを移行させるためのコマンドもあります。

# まずは普通にmirrorでclone
git clone --mirror https://example.jp/old.git
cd old.git
# LFSのファイルを全て取得
git lfs fetch --all
# mirrorでpush
git push --mirror https://example.jp/new.git
# LFSのファイルを全てアップデート
git lfs push --all https://example.jp/new.git

(「git lfs clone --mirror」でcloneとfetchがまとめて出来そうっぽい雰囲気だったのですが、どうやらそうではない模様)

これでLFSも含めて完全に新リポジトリへ移動できます。

当然ながらfetchで全ファイルをダウンロード、pushで全ファイルをアップロードするのでネットワーク帯域の圧迫には注意

 - プログラミング