LoginSignup
1
2

More than 3 years have passed since last update.

git-svnでリポジトリを移行しつつgit-lfsを使用する方法について

Last updated at Posted at 2019-08-31

Subversionで開発中のUnityプロジェクトをGitHub管理に移行するにあたり、git-svnを使っての移行でハマったので、今後のためにも書き残しておこうと思います。

参考にさせていただいたサイト

git-svnとgit-lfsについての情報がなかなか見当たらなかったので、下記のページにはとても助けられました。多謝。

Qiita内

Qiita外

発生した問題

以下ハマりポイント。

  • いくつかのファイルが100MBオーバー → LFS使おう!
  • バイナリファイルが比較的多め → LFS使おう!
  • 全体としては2.5GBほどのプロジェクト
  • 手順通りに「git svn clone」でコミットしようとすると、転送量が大きすぎるために接続エラー(error: RPC failed)が発生。

解決までの手順

今回の作業環境はMacですが、理屈としてはWindowsでも通用するかと。

1. とりあえずリポジトリ作る

GIT側のリポジトリは空っぽのものを作ります。そうしないと競合起こすので。

mkdir HOGEHOGE
cd HOGEHOGE
git svn init --prefix=svn/ SVN_REPO_URL
git svn fetch
#"git clone --prefix=svn SVN_REPO_URL" でもOKです。
#fetchした後にローカルリポジトリを操作すると、その後のデータが展開されないという挙動だったので、エラーが出ない状態ならcloneでも良いかと。

git remote add origin GIT_REPO_URL
git lfs install --force
git lfs track *.jpg *.tga *.fbx *.assetbundle *.psd *.hdr *.ttf *.mdb *.mp3 *.ogg *.png *.pdf *.zip *.bundle *.otf *.wav *.bmp *.pdb *.a *.acb *.awb *.dll *.exr

trackはLFSに置きたいものを適当に設定。

2.LFSに置きたいファイルについて、管理履歴から除外

trackを行った際に .gitattributes が生成されているので、LFS管理にするファイルリストを生成します。面倒なのでファイルにまとめて自動作業化。
→ migrate コマンドあんじゃん!!!!

3.コミットログごとにリモートリポジトリにコミット

この部分の情報がなかなか見つかりませんでした。
ローカルリポジトリに記録されたコミットIDを指定して順番にコミットしていくことで、転送量エラーが置きないようにします。
(ただしSVN時代に大きいコミットをしていた場合はどうしようもないので諦めるしか無い?)

for i in $(git log | grep ^commit | cut -b 8- | tail -r); do
  git push -u origin ${i}:refs/heads/master ;
done 

実は

ここまで書いておきながら、Gitの管理履歴から除外するところまでしか処理が終わっていないので、無事に移行されたのかは、まだわかりません!

1
2
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
2