GitSvn - poramal/VuePractice GitHub Wiki

git svn

svnserve

svnserve -X --root C:\Work\Source\SVN\rep
svnserve -X --root \\192.168.117.220\svn

-X は接続を一度だけ受け入れるオプション
-d は接続を何度も受け入れるオプション
--root にはSVNリポジトリのルートを指定する

clone

git svn clone -s --prefix=svn/ svn://localhost hoge.git
git svn clone -s --prefix=svn/ svn://localhost/LBrosSrc

内部では init -> fetch が実行されている。
cloneは常に1~HEADを取得しようとするので、エラーで止まった際に途中から再開できない。
-s svn/trunk=master svn/branches=branches svn/tags=tags
-T svnのトランクディレクトリ
-t svnのタグディレクトリ
-b svnのブランチディレクトリ

最新リビジョン
-r HEAD

特定リビジョン
-r リビジョン番号

リビジョン範囲
-r リビジョン番号:HEAD

ディレクトリ除外
※以下はtrunk/backupディレクトリを除外
--ignore-paths="^trunk/backup"

init -> fetch

git svn init --no-metadata -s --prefix=svn/ svn://localhost/LBrosSrc
git svn fetch

# エラーのリビジョンから再開
git svn fetch -r リビジョン番号:HEAD

--no-metadata SVNのメタ情報を含めない

ガベージコレクト

git gc --aggressive

リモートリポジトリの作成

cd rep
git init --bare --shared

--bare
最小限のリポジトリを作成する。もしGIT_DIR環境が設定されていなければ、現在のワーキング・ディレクトリが設定される。

--shared
Gitリポジトリが複数のユーザで共有されることを指定する。このオプションは、同じグループに属するユーザがそのリポジトリにpushすることを許可する。

ブランチの移行

cd ../all.git
git checkout -b release01 svn/release01
git checkout -b release02 svn/release02
git checkout -b release03 svn/release03
git checkout -b release04 svn/release04
git checkout -b release05 svn/release05
git checkout master
git remote add origin C:/Work/Source/Git/rep/
git push -u origin --all

タグの移行

git tag release03/web svn/tags/web
git tag release03/win svn/tags/win
git tag release03/bat svn/tags/bat
git push origin --tags

クローン

git clone C:/Work/Source/Git/all_remote.git/

フィルターブランチ

# 全てのコミット履歴から、指定されたファイルを削除
git filter-branch --tree-filter "rm -f ファイルパス" HEAD

# 全てのコミット履歴から、指定されたディレクトリを削除
git filter-branch --tree-filter "rm -f -r ディレクトリパス" HEAD

# 全てのコミット履歴から、指定されたディレクトリのみ抽出
git filter-branch --subdirectory-filter web/ HEAD

タグもフィルターして、新規作成したリモートリポジトリにプッシュすれば分離完成?