本文是基於git命令進行展開介紹的,window上的圖形化操做tortoiseGit ,也能夠圖形化完成下方的介紹,思路相同,操做更簡單,對應的按鈕菜單都有,不在贅述git
本文僅提供指導和介紹,若是遇到文中未遇到的場景或問題,請自行實踐驗證後再進行實際的操做,百度,google,bing等等緩存
實踐,很關鍵,命令行提示信息很關鍵bash
固然,最後,你要先會git,明白原理,知道分支用法,才能更好的理解git svn;app
因爲公司的代碼庫,如今並行有2種,svn和gitlab,可是你們都懂得,一旦你習慣了git的工做模式,就很難回去了,每次使用svn就想新建個分支,本身搞一搞,什麼之類,也所以給測試人員帶來了麻煩(被吐槽o(╯□╰)o),基於遇到問題,解決問題的 的探索精神,決定研究一下git自己提供給咱們的聯動工具;svn
英文ok的同窗能夠直接看這裏, 官方git-svn工具
簡單說一下:git-svn 是git 提供的一個雙向操做的方式,便可以經過它將svn上的代碼歸入到git的管理,同時在本地使用git操做代碼,最後將最終要提交到svn的代碼,經過相關的命令從git庫中提交到svn庫中;gitlab
2.一、操做命令總述測試
序號 | 命令 | 說明 |
---|---|---|
1 | git svn clone (svn倉庫) | 從svn端clone一個git倉庫到本地 |
2 | git svn rebase | 同步svn代碼修改到本地分支 |
3 | git svn dcommit | 提交本地修改到svn |
4 | git add (./changed file) | 將修改歸入到暫存區 |
5 | git commit | 提交暫存區的修改到倉庫 |
6 | git stash | 提交代碼到緩存隊列 |
7 | git stash apply | 應用緩存隊列中的緩存數據到本地 |
8 | git branch (分支名稱) | 新建分支 |
9 | git checkout (分支名稱) | 檢出分支 |
- 一、使用git svn 在本地clone 一個受git 管理的倉庫
- 二、在本地進行代碼的修改和其餘變更[就是在git的倉庫下的操做],注意分支
- 三、將最終修改的代碼,提交到svn端
我的建議:ui
(1) 少許修改能夠嘗試,使用git的stash暫存修改代碼,同步svn端的變更以後,以後還原修改,再同步到svn ----> 對應練習場景三
(2) 若是是大量變更,建議保持master分支的乾淨,保持只有master於svn 同步(即,只在master分支上,執行相關的git svn 命令),在單獨的開發分支,進行開發,最終 merge 或 rebase 修改到 master 分支(注意:合併以前先同步svn端的更新),而後同步到svn;----> 對應練習場景四google
注意:合併以前先同步svn端的更新
注意:合併以前先同步svn端的更新
注意:合併以前先同步svn端的更新
重要的事情說三遍!!!
寫在前面
- 一、下方場景有前提,請閱讀場景說明
- 二、下方練習場景,可能對應你實際應用中的不太場景下的操做,請思考匹配使用
- 三、若是遇到其餘問題,請閱讀相關的命令行說明,自行解決或百度(可能會遇到記錄同步時的,記錄不匹配的問題,可能須要 使用git rebase 命令,詳細根據具體場景,自行根據命令行分析)
場景1: 新建一個Git svn 庫,而後提交修改的代碼 「注意」此種操做場景比較理想,這裏假設的是svn 端在修改期間沒有新的人提交修改。
// 先從svn上選一個地址,經過git svn 命令clone到本地
git svn clone (一個svn倉庫地址)
// 在本地修改內容,並提交
git add ./changed file
git commit -m "說明文字"
// 使用git-svn命令將修改提交到svn庫
git svn dcommit
複製代碼
場景2:clone 倉庫過了一段時間以後,在操做期間是有修改,而後再經過git svn 倉庫修改代碼;
// 首先 同步 svn 端的修改
git svn rebase
// 更新 了遠端資源以後,在修改本地的相關文件,並提交
git add ./changed file
git commit -m "說明文字"
// 使用git-svn命令將修改提交到svn庫
git svn dcommit
複製代碼
場景三: 更改了本地的代碼,在提交以前 發現端有更新
// 先暫存 本地修改的代碼到 stash (詳細能夠自行百度)
git stash
// 同步 svn端的更新
git svn rebase
// 再從stash 中取出以前存儲的修改
git stash apply
// 若是用衝突,解決衝突,並提交
git add ./changed file
git commit -m "說明文字"
// 使用git-svn命令將修改提交到svn庫
git svn dcommit
複製代碼
場景四:保持master分支乾淨,master 於svn庫同步交流,在別的分支進行代碼修改
//基於clone好的倉庫,新建分支修改代碼
git branch changeBranch
//在 changeBranch分支上進行代碼修改,並提交
git add ./changed file
git commit -m "說明文字"
// 切換回 master分支,同步svn端的修改
git checkout master
git svn rebase
// 同步完成後,合併changeBranch分支的修改
git merge changeBranch
// 提交最終修改到 svn
git svn dcommit
// 題外話:上述操做完成後,你會發現,分支changeBranch 分支已經沒有用了,能夠進行刪除,避免開發迭代後,分支過多而混亂
git branch -d changeBranch
複製代碼
2.二、示例操做
此處僅僅列出了簡單的場景(練習場景一),其餘場景,能夠自行根據練習,自行實現
一、使用git-svn clone 一個svn倉庫的地址到本地,例如
git svn clone http://XXXXXXXXXXXXXXXXXXXXXXXX-gitSvn
複製代碼
如上圖所示,clone下來的工程,會將svn庫中的代碼記錄也同步帶git庫中(真是貼心方便,(:зゝ∠))
二、在clone到本地的倉庫,進行代碼的修改並提交
此處命令僅僅是演示,詳細使用須要瞭解相關的命令而後並操做
// 先修改文件內容;
git add ./或者文件名
git commit -m "提交內容。。"
// 而後同步修改都svn 端
git svn dcommit
複製代碼
第一步: 創建倉庫: 使用git svn clone
第二步: 在本地倉庫,創建修改分支 newBranch
第三步: 在修改分支newBranch 修改代碼, 在master上同步svn上的代碼
第四步: 完成在修改分支newBranch的開發後,先切回master分支上同步svn的修改
第五步: 在本地合併操做 newBranch的修改到 master分支,
第六步: 解決衝突後,提交master上的修改到svn端;