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