SVN遷移到Git
svn目錄結(jié)構(gòu)
先來看看svn目錄結(jié)構(gòu),這個(gè)會(huì)關(guān)系到我們?nèi)绾芜w移。以下說的都是單個(gè)項(xiàng)目的遷移。
標(biāo)準(zhǔn)
/d/proj1
├── branches
│ ├── a
│ │ └── readme.txt
│ └── b
│ ├── 11.txt
│ └── readme.txt
├── tags
│ └── v1.0
│ ├── 11.txt
│ └── readme.txt
└── trunk
└── readme.txt
非標(biāo)準(zhǔn)
目前我們使用的結(jié)構(gòu)
/d/proj1
├── branches
│ ├── a
│ │ └── readme.txt
│ └── b
│ ├── 11.txt
│ └── readme.txt
├── develop
└── trunk
└── readme.txt
git svn
svn遷移到git的核心命令。該命令包含在git中,需要先安裝git。
使用示例
git svn clone svn://192.168.1.108:9999/migrator/ --no-metadata --authors-file=userinfo.txt --trunk=trunk --tags=tags --branches=branches migrator
從svn遷移到git的流程就是從svn拉取代碼到本地,然后推送到git。當(dāng)然我們肯定是希望能保留svn中的提交記錄,這個(gè)完全沒有問題。
簽名映射
某些情況下,svn中的提交署名和要遷入的git系統(tǒng)署名不一致,這個(gè)時(shí)候可以指定名字映射,通過參數(shù)—authors-file指定。具體的文件格式可以Google下。
如果簽名要保持一致,那么可以忽略這個(gè)文件
檢出代碼
先看看對(duì)于標(biāo)準(zhǔn)的svn目錄結(jié)構(gòu)的工程如何遷移。
對(duì)于標(biāo)準(zhǔn)svn目錄結(jié)構(gòu)的項(xiàng)目可以使用示例中命令,也可以使用以下簡(jiǎn)化的命令
git svn clone svn://192.168.1.108:9999/migrator/ -s
來說說示例中各參數(shù)的含義
- 參數(shù)–no-metadata表示阻止git導(dǎo)出SVN包含的一些無用信息
- 參數(shù)–authors-file表示SVN賬號(hào)映射到git賬號(hào)文件,所有svn作者都要做映射
- 參數(shù)–trunk表示主開發(fā)項(xiàng)目,一般就是trunk
- 參數(shù)–branches表示分支項(xiàng)目,
--ignore-refs表示不包含后面的分支項(xiàng)目 - 參數(shù)migrator表示git項(xiàng)目名稱
再來看看非標(biāo)準(zhǔn)svn目錄結(jié)構(gòu)的項(xiàng)目如何處理(以我們現(xiàn)在的目錄為例)
git svn clone svn://192.168.1.108:9999/migrator/ --no-metadata --trunk=trunk --tags=tags --branches=branches migrator
先檢出不包含develop的代碼
接著往下
推送代碼到git
使用git命令將各個(gè)分支推送到git遠(yuǎn)端(切換到各個(gè)分支并push,不會(huì)的自己查詢方法)
到此,標(biāo)準(zhǔn)svn目錄的工程就遷移到了git上。非標(biāo)準(zhǔn)svn目錄的項(xiàng)目繼續(xù)往下
處理非標(biāo)準(zhǔn)svn目錄項(xiàng)目
刪除本地檢出的代碼,重新檢出不在svn標(biāo)準(zhǔn)目錄中的分支(develop)
git svn clone http://svn.***.com/svn/***/develop/ migrator
將develop推送到遠(yuǎn)端
git push git@git.***.com:***/migrator.git develop:develop
至此,單個(gè)項(xiàng)目遷移完畢。而且新的git項(xiàng)目中保留了所有svn的提交記錄。