關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

busyrobot發表於2019-05-13

關於git 和 svn 的協作


寫在前面:

  • 本文是基於git命令進行展開介紹的,window上的圖形化操作tortoiseGit ,也可以圖形化完成下方的介紹,思路相同,操作更簡單,對應的按鈕選單都有,不在贅述

  • 本文僅提供指導和介紹,如果遇到文中未遇到的場景或問題,請自行實踐驗證後再進行實際的操作,百度,google,bing等等

  • 實踐,很關鍵,命令列提示資訊很關鍵

  • 當然,最後,你要先會git,明白原理,知道分支用法,才能更好的理解git svn;

一、背景

由於公司的程式碼庫,現在並行有2種,svn和gitlab,但是大家都懂得,一旦你習慣了git的工作模式,就很難回去了,每次使用svn就想新建個分支,自己搞一搞,什麼之類,也因此給測試人員帶來了麻煩(被吐槽o(╯□╰)o),基於遇到問題,解決問題的 的探索精神,決定研究一下git本身提供給我們的聯動工具;

二、git-svn 介紹

  • 1、介紹

英文ok的同學可以直接看這裡, 官方git-svn

簡單說一下:git-svn 是git 提供的一個雙向操作的方式,即可以通過它將svn上的程式碼納入到git的管理,同時在本地使用git操作程式碼,最後將最終要提交到svn的程式碼,通過相關的命令從git庫中提交到svn庫中;

  • 2、操作步驟:

2.1、操作命令總述

  • 2.1.1、 相關的命令說明
序號 命令 說明
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 (分支名稱) 檢出分支
  • 2.1.2、操作思路總述
  • 1、使用git svn 在本地clone 一個受git 管理的倉庫
  • 2、在本地進行程式碼的修改和其他變動[就是在git的倉庫下的操作],注意分支
  • 3、將最終修改的程式碼,提交到svn端

個人建議

(1) 少量修改可以嘗試,使用git的stash暫存修改程式碼,同步svn端的變動之後,之後還原修改,再同步到svn ----> 對應練習場景三
(2) 如果是大量變動,建議保持master分支的乾淨,保持只有master於svn 同步(即,只在master分支上,執行相關的git svn 命令),在單獨的開發分支,進行開發,最終 merge 或 rebase 修改到 master 分支(注意:合併之前先同步svn端的更新),然後同步到svn;----> 對應練習場景四

注意:合併之前先同步svn端的更新

注意:合併之前先同步svn端的更新

注意:合併之前先同步svn端的更新

重要的事情說三遍!!!

  • 2.1.3、 一些練習場景,可以本地模擬場景進行練習,熟悉後可以對照自身需要,進行套用

寫在前面

  • 1、下方場景有前提,請閱讀場景說明
  • 2、下方練習場景,可能對應你實際應用中的不太場景下的操作,請思考匹配使用
  • 3、如果遇到其他問題,請閱讀相關的命令列說明,自行解決或百度(可能會遇到記錄同步時的,記錄不匹配的問題,可能需要 使用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.2、示例操作

此處僅僅列出了簡單的場景(練習場景一),其他場景,可以自行根據練習,自行實現

1、使用git-svn clone 一個svn倉庫的地址到本地,例如

git svn clone http://XXXXXXXXXXXXXXXXXXXXXXXX-gitSvn

複製程式碼

關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

如上圖所示,clone下來的工程,會將svn庫中的程式碼記錄也同步帶git庫中(真是貼心方便,(:зゝ∠)

2、在clone到本地的倉庫,進行程式碼的修改並提交

此處命令僅僅是演示,詳細使用需要了解相關的命令然後並操作


// 先修改檔案內容; 

git add ./或者檔名
git commit -m "提交內容。。"

// 然後同步修改都svn 端

git svn dcommit

複製程式碼

關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

關於git 和 svn 的協調使用(主要用於方便在git 和 svn之間管理程式碼)

三、開發模式(個人見解僅供參考)

第一步: 建立倉庫: 使用git svn clone

第二步: 在本地倉庫,建立修改分支 newBranch

第三步: 在修改分支newBranch 修改程式碼, 在master上同步svn上的程式碼

第四步: 完成在修改分支newBranch的開發後,先切回master分支上同步svn的修改

第五步: 在本地合併操作 newBranch的修改到 master分支,

第六步: 解決衝突後,提交master上的修改到svn端;

四、注意事項

  • 1、注意保持於svn端同步的分支的乾淨,一般是master分支;
  • 2、注意於svn端程式碼的同步時機,上方以強調,不贅述了
  • 3、注意分支的管理
  • 4、注意命令列的提示資訊
  • 5、注意在不確定是什麼現象前,先進行預演或練習

參考資源:

gitRebase 命令

git 介紹

git-svn教程

git-svn協作官方

相關文章