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

關於git 和 svn 的協做


寫在前面:

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

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

  • 實踐,很關鍵,命令行提示信息很關鍵bash

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

1、背景

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

2、git-svn 介紹

  • 一、介紹

英文ok的同窗能夠直接看這裏, 官方git-svn工具

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

  • 二、操做步驟:

2.一、操做命令總述測試

  • 2.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.二、操做思路總述
  • 一、使用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端的更新

重要的事情說三遍!!!

  • 2.1.三、 一些練習場景,能夠本地模擬場景進行練習,熟悉後能夠對照自身須要,進行套用

寫在前面

  • 一、下方場景有前提,請閱讀場景說明
  • 二、下方練習場景,可能對應你實際應用中的不太場景下的操做,請思考匹配使用
  • 三、若是遇到其餘問題,請閱讀相關的命令行說明,自行解決或百度(可能會遇到記錄同步時的,記錄不匹配的問題,可能須要 使用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

複製代碼

3、開發模式(我的看法僅供參考)

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

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

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

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

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

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

4、注意事項

  • 一、注意保持於svn端同步的分支的乾淨,通常是master分支;
  • 二、注意於svn端代碼的同步時機,上方以強調,不贅述了
  • 三、注意分支的管理
  • 四、注意命令行的提示信息
  • 五、注意在不肯定是什麼現象前,先進行預演或練習

參考資源:

gitRebase 命令

git 介紹

git-svn教程

git-svn協做官方

相關文章
相關標籤/搜索