用SVN進行團隊開發協做生命週期詳解


前言

查找了SVN的相關知識不管是園子裏仍是百度都只有一些理論,而有實踐教程的都是點到爲止,並無一個完整的關於團隊如何使用SVN協同工做的教程,所以寫下該篇但願能對你們起到一點幫助。

面向人羣

本教程面向有必定svn基礎的,並且以前都是單人開發,對團隊開發如何使用SVN並不瞭解,但急需瞭解的的同窗。

背景

因爲團隊開發是若是沒有正確的使用SVN常常出現A在作一個需求涉及到a,b項目,而B再作另外一個項目涉及到a,c項目。
而後A作完了直接提交了代碼,可是並未通過測試。B的代碼測試完畢而後提交準備投產,而後發現A已經提交了代碼,因此他就獲取了A的代碼,編譯後若是不詢問A是否代碼通過測試,可能直接投產了,而後投產出現了問題。或者知道了A的代碼還未測試,必須等測試經過後才能投產。不然只能恢復到測試完的代碼進行投產。最後甚至有可能就忘記提交了。

解決方案

規定代碼必須通過測試後才能提交,這必定程度上解決了這個問題,可是這就偏離了版本控制的初衷並且每次開發代碼必須一次性開發完成,若開發中途發現問題,致使一部分代碼須要重打,那麼就不能很好的回滾。

團隊開發生命週期

建立新項目

如下操做都是使用VS的VisualSVN插件,其餘插件使用方法都是差很少的,在文件資源管理器中使用方法原理是同樣的。緩存

首先針對咱們的SVNTest1項目服務器

1-2017115191232

  1. 在項目右擊菜單中將整個項目加入到SVN中svn

    2-2017115191532
  2. 首選選擇須要加入的根目錄點擊下一步工具

    3

  3. 新項目選擇新建倉庫,若已經在SVN服務器建立目錄接口就選擇添加存在項目測試

    4

  4. 選擇SVN的路徑插件

    5

    在svn中咱們建立的倉庫下包含trunk,branches和tags三個文件夾,trunk爲主線,branches爲分支而tags則是標籤
    trunk:用於存放主線代碼,咱們不能在這裏進行開發
    branches:用於並行開發使用,每一個需求或者bug修復都須要建立一個分支
    tags:這裏的代碼不能編輯,只可讀取,每隔標誌性版本咱們能夠在tags中建立一個標籤,如V1.0正式版,那麼當代碼合併到trunk後能夠建立一個標籤,若是接下來開發v2.0版本,而忽然發現v1.0有個bug,就能夠將次代碼建立一個新分支用於修復bug,修復完成後能夠合併到主線任務中並建立v1.1標籤
    咱們可使用2種結構開發咱們的項目,第一種是每一個項目文件夾下建立這三個目錄,而後進行開發;第二種方式在根目錄下就建立三個文件夾,而後在這三個文件夾下有多個項目。這裏我用第一種方式,兩種方式只是結構不一樣,原理同樣的版本控制

  5. 若是須要驗證輸入用戶名和密碼,而後點擊導入,新項目就導入成功code

    6
    7
    8

  6. 導入成功只是在咱們本地SVN緩存中導入成功,咱們必須提交到服務器中htm

    9
    10
    11

  7. 咱們能夠將bin和obj這些目錄忽略掉,不然每次編譯提交後他人更新都會有衝突,在VisualSVN插件提交默認已經忽略了這兩個目錄所以直接提交便可。

    12
    13
    14
    15

建立分支

如今主線已經建立好了 ,若是咱們要進行開發或者修復bug,請不要在主線上面開發,咱們必須先建立分支,而後再分支上進行開發,這樣就不會影響到主線的代碼,當分支開發完成並測試經過後能夠合併到主線,同時若分支沒用便可刪除。

16

在工具欄中有經常使用的按鈕,方便咱們使用,若是使用其餘SVN插件也是相似的,咱們也能夠直接在項目右擊進行操做

17

不知爲什麼在菜單中沒有建立分支選項,咱們直接在工具欄中建立,在文件夾右擊建立分支也是同樣的

18
19

若是否選切換工做副本至新分支,那麼建立完會自動切換,若是沒有鉤,那麼咱們仍是在原來的主線,咱們暫時不勾選手動切換分支

20

建立完成因爲咱們沒有勾選自動切換,svn就提示了咱們手動切換,同時SVN服務器中也有了新的分支

21

切換分支

22

默認只有主線,這裏咱們選擇切換到其餘分支

23
24
25

如今咱們已經切換到新的v0.1的分支了,如今假設person2同窗須要對對該項目進行同步開發,所以咱們但願每一個人能區分開來,咱們能夠將項目根據人來區分,如/Test/branches/person1/v0.1,/Test/branches/person1/v0.1-bug1,/Test/branches/person2/v0.1等,也能夠根據項目來區分,如如/Test/branches/v0.1/person1/xxx,/Test/branches/v0.1/person1/fix-bug1,/Test/branches/v0.1/person2`等。只要決定一個規範既可。

  1. 如今咱們約定以/Test/branches/v0.1/person1的方式來存放,那麼首先person1能夠建立一個新的分支進行開發。

    26

  2. 模擬person2同窗並行開發,因爲B同窗須要獲取全新的項目,所以須要首先從版本庫中獲取該項目

    27
    28
    29

    如今B同窗須要建立一個新的分支到person2目錄

    30

    此時目錄結構如圖所示,爲了不干擾項,我已從svn服務器刪除了第一個建立的分支

    31

  3. 如今person1和person2能夠獨立進行開發並提交代碼到本身的分支上而不會影響主線,更不會影響其餘人的開發了

    • person1添加了一個文件1.cs
      32
      33
      34

    • person2添加了一個文件2.cs

    35
    36
    37

    咱們發現他們能夠正常提交而無需更新,由於實際他們是在不一樣的分支工做,固然不會產生影響

合併代碼

假設person1已經開發完成並經過測試須要將分支合併到主線
  1. 切換到主線

  2. 點擊合併

    39
    40
    41
    42

    到此爲止已經將分支合併到咱們的主線,可是這裏的主線只是咱們本地的主線(svn會將分支保存到不一樣的目錄,所以咱們本地不一樣分支會存放在不一樣的臨時目錄的,在svn文件夾下,不要手動去修改該目錄)

    43

  3. 將本地主線提交到服務器

    44

    咱們能夠看到合併到主線後,咱們的解決方案管理器有些黃色的圓點表明修改,咱們看下svn服務器

    45

    發現咱們雖然提交了代碼實際服務器主線還並無1.cs文件

    46
    47
    48

    提交成功後發現svn服務器主線已經有該文件

    4. person2已經開發完成並經過測試須要將分支合併到主線

    5. person2須要切換到主線

    49

    6. 切換完點擊合併

    50
    51
    52
    53

    會發先有衝突,由於person1已經提交了代碼,而你本地的代碼並非最新代碼,因此合併以前先將主線代碼合併到分支,而後分支解決衝突後提交到服務器分支。再從新切換到主線進行分支合併,此時完整的流程即走完

  4. 以上3個步驟忽略,不要直接切換主線,而是提交代碼前先保證分支代碼最新,首先將主線合併到分支

    54
    55
    56

  5. 解決衝突後,便可提交代碼

    57

    代碼還未提交時SVN服務器person2目錄實際尚未1.cs文件

    58

    提交代碼後就有了

    59

  6. 合併分支到主線

    60
    61
    62
    63

  7. 提交主線代碼

    64

    因爲person1並未獲取person2的代碼所以person1實際只有1.cs,而person2因爲在person1提交的代碼後更新了主線代碼,所以perosn2有1.cs和2.cs

正式版本發佈

版本發佈只針對trunk的目錄進行發佈
如今開發任務已經完成,咱們認爲這個版本已經很成熟,咱們但願把這個版本定爲v1.0,咱們如今能夠刪除分支,同時將該版本打個標記

  1. 刪除分支

    直接刪除無用分支便可
    65

  2. 作v1.0的標記

    標記其實就是一個分支,只不過tags文件夾應該設置爲只讀權限

    66

    切換到主線切出一個tags

    67
    68

bug修復

如今咱們可能在開發2.*的版本了,忽然發現1.0的版本有bug

  1. 從tags/v1.0版本中切除一個分支修復bug

    69
    70

  2. 修復bug後作一個v1.1的tags,或者根據狀況合併當trunk

    71
    72

  3. 修復bug後合併到trunk分支

    73
    74
    75

結束語

至此整個團隊開發生命週期就講解完畢,接下來就是不斷佚代的過程。
以上是我我的理解,若是看來此篇文章略有所學,請支持下,如如有誤煩請指正。

PS: 第一次用vs code編寫,仍是挺好用的(●ˇ∀ˇ●)

76


本文地址:http://www.javashuo.com/article/p-xoozwnym-br.html 做者博客:傑哥很忙 歡迎轉載,請在明顯位置給出出處及連接)

相關文章
相關標籤/搜索