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

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

目錄


前言

查找了SVN的相關知識無論是園子裏還是百度都只有一些理論,而有實踐教程的都是點到爲止,並沒有一個完整的關於團隊如何使用SVN協同工作的教程,因此寫下該篇希望能對大家起到一點幫助。

面向人羣

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

背景

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

解決方案

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

團隊開發生命週期

創建新項目

以下操作都是使用VS的VisualSVN插件,其他插件使用方法都是差不多的,在文件資源管理器中使用方法原理是一樣的。

首先針對我們的SVNTest1項目

id="iframe_0.507204060908407" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2Ffdfc565cbd1507c6.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.507204060908407" frameborder="0" scrolling="no" height="180" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.07332807616330683" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F7ff7164a615dfa70.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.07332807616330683" frameborder="0" scrolling="no" height="383" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  2. 首選選擇需要加入的根目錄點擊下一步

    id="iframe_0.07176448265090585" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F7eb531f3e0dfe0ee.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.07176448265090585" frameborder="0" scrolling="no" height="453" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.8905712720006704" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F9f907186076e2241.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.8905712720006704" frameborder="0" scrolling="no" height="453" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  4. 選擇SVN的路徑

    id="iframe_0.8880290410015732" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2Fd783cd7f77d5d489.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.8880290410015732" frameborder="0" scrolling="no" height="453" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.16892718337476254" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F095a46e66253f441.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.16892718337476254" frameborder="0" scrolling="no" height="453" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

    在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. 如果需要驗證輸入用戶名和密碼,然後點擊導入,新項目就導入成功

    id="iframe_0.7780645731836557" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F087c7f49b5806345.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7780645731836557" frameborder="0" scrolling="no" height="453" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.4847281516995281" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F21eb86bc959db373.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4847281516995281" frameborder="0" scrolling="no" height="453" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.8229707113932818" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2Fcbb0e7bc30bf5448.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.8229707113932818" frameborder="0" scrolling="no" height="210" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.23790993820875883" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F339f20dbb877ec51.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.23790993820875883" frameborder="0" scrolling="no" height="166" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.5594599491450936" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F1ff37f9b54e801be.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5594599491450936" frameborder="0" scrolling="no" height="105" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  7. 我們可以將bin和obj這些目錄忽略掉,否則每次編譯提交後他人更新都會有衝突,在VisualSVN插件提交默認已經忽略了這兩個目錄因此直接提交即可。

    id="iframe_0.917266797972843" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2Fa34c58da5a7fba3e.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.917266797972843" frameborder="0" scrolling="no" height="572" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.20002428954467177" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F7278eb691ec8a54c.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.20002428954467177" frameborder="0" scrolling="no" height="523" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.4724438551347703" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2Fe5d47a4b8a7317d0.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4724438551347703" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.19558846508152783" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F87ec2f37177d5b5a.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.19558846508152783" frameborder="0" scrolling="no" height="252" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

創建分支

現在主線已經創建好了 ,如果我們要進行開發或者修復bug,請不要在主線上面開發,我們必須先創建分支,然後再分支上進行開發,這樣就不會影響到主線的代碼,當分支開發完成並測試通過後可以合併到主線,同時若分支沒用即可刪除。

id="iframe_0.5664421219844371" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2Ffc07ab83f7262c52.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5664421219844371" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

在工具欄中有常用的按鈕,方便我們使用,如果使用其他SVN插件也是類似的,我們也可以直接在項目右擊進行操作

id="iframe_0.9087326962035149" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F846d28c7da29c2d9.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.9087326962035149" frameborder="0" scrolling="no" height="209" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

不知爲何在菜單中沒有創建分支選項,我們直接在工具欄中創建,在文件夾右擊創建分支也是一樣的

id="iframe_0.4121172053273767" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F94417c0737bd9230.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4121172053273767" frameborder="0" scrolling="no" height="422" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
id="iframe_0.5820422121323645" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F4d048f2cca05b129.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5820422121323645" frameborder="0" scrolling="no" height="583" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

如果否選切換工作副本至新分支,那麼創建完會自動切換,如果沒有鉤,那麼我們還是在原來的主線,我們暫時不勾選手動切換分支

id="iframe_0.13681561243720353" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F8738c21c84039558.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.13681561243720353" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

創建完成由於我們沒有勾選自動切換,svn就提示了我們手動切換,同時SVN服務器中也有了新的分支

id="iframe_0.8498955583199859" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F40e56c3073eb3ef3.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.8498955583199859" frameborder="0" scrolling="no" height="221" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

切換分支

id="iframe_0.4467506995424628" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F043af865550e09d4.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4467506995424628" frameborder="0" scrolling="no" height="264" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

id="iframe_0.07909896573983133" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2Fd56d3510868bbf47.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.07909896573983133" frameborder="0" scrolling="no" height="406" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
id="iframe_0.04897631308995187" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F2cb0d61e424de14f.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.04897631308995187" frameborder="0" scrolling="no" height="219" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
id="iframe_0.8689060872420669" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F69dfb2955d8fc2c9.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.8689060872420669" frameborder="0" scrolling="no" height="121" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

現在我們已經切換到新的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可以創建一個新的分支進行開發。

    id="iframe_0.21707506501115859" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F3e3328fabe13d45e.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.21707506501115859" frameborder="0" scrolling="no" height="52" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  2. 模擬person2同學並行開發,由於B同學需要獲取全新的項目,因此需要首先從版本庫中獲取該項目

    id="iframe_0.03879121202044189" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F93290cb892bd68f8.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.03879121202044189" frameborder="0" scrolling="no" height="605" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.4045182727277279" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F0c24542a9ef87a2e.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4045182727277279" frameborder="0" scrolling="no" height="311" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.3349552054423839" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F373b72570969f467.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.3349552054423839" frameborder="0" scrolling="no" height="231" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

    現在B同學需要創建一個新的分支到person2目錄

    id="iframe_0.1818795169238001" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2Fbaf7215c46c3bc9a.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.1818795169238001" frameborder="0" scrolling="no" height="247" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.19936823891475797" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2Ffeea36c17c9f34ad.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.19936823891475797" frameborder="0" scrolling="no" height="620" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  3. 現在person1和person2可以獨立進行開發並提交代碼到自己的分支上而不會影響主線,更不會影響其他人的開發了

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

    id="iframe_0.44014236656948924" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F20da605594e02bbe.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.44014236656948924" frameborder="0" scrolling="no" height="164" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.7749052240978926" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F05f2ed24cf798bf2.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7749052240978926" frameborder="0" scrolling="no" height="523" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.610345519380644" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F1be57fd732d777fb.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.610345519380644" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.5767491848673671" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2Fa80fc03b738ecf80.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5767491848673671" frameborder="0" scrolling="no" height="194" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.72611860698089" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F7ef7e468a470dde0.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.72611860698089" frameborder="0" scrolling="no" height="523" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.8270613651257008" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2Fafbe25721a0ee418.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.8270613651257008" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

    我們發現他們可以正常提交而無需更新,因爲實際他們是在不同的分支工作,當然不會產生影響

合併代碼

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

    id="iframe_0.03539323271252215" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F6e6206e2eac6069f.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.03539323271252215" frameborder="0" scrolling="no" height="142" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  2. 點擊合併

    id="iframe_0.22148090414702892" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F79d096deaba5e616.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.22148090414702892" frameborder="0" scrolling="no" height="538" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.04289116756990552" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F6d8ecd23c13faf2c.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.04289116756990552" frameborder="0" scrolling="no" height="595" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.13680736045353115" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F68745c308af9b958.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.13680736045353115" frameborder="0" scrolling="no" height="595" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.42645198525860906" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2Fafb26f400c4e4ddb.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.42645198525860906" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.7035537329502404" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F1ff37f9b54e801be.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7035537329502404" frameborder="0" scrolling="no" height="105" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.1643203201238066" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F521f9a0837c68163.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.1643203201238066" frameborder="0" scrolling="no" height="265" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

    我們可以看到合併到主線後,我們的解決方案管理器有些黃色的圓點代表修改,我們看下svn服務器

    id="iframe_0.6422996509354562" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F45d96a0173963dc6.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.6422996509354562" frameborder="0" scrolling="no" height="735" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.5015935546252877" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F3ca58613f65537ec.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5015935546252877" frameborder="0" scrolling="no" height="523" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.7887600876856595" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2Fd6d0140608328838.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7887600876856595" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.4325496549718082" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F0aa8d1b189a1315a.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4325496549718082" frameborder="0" scrolling="no" height="735" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

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

    5. person2需要切換到主線

    id="iframe_0.9293101031798869" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F7a7f8a8c5fd55d45.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.9293101031798869" frameborder="0" scrolling="no" height="99" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

    6. 切換完點擊合併

    id="iframe_0.5067163575440645" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F79d096deaba5e616.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5067163575440645" frameborder="0" scrolling="no" height="538" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.3066984163597226" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F3f79daf2f25344c3.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.3066984163597226" frameborder="0" scrolling="no" height="595" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.6952212613541633" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F68745c308af9b958.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.6952212613541633" frameborder="0" scrolling="no" height="595" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.9180514223407954" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F09cc13baf36ed073.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.9180514223407954" frameborder="0" scrolling="no" height="473" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

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

    id="iframe_0.5434050085023046" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2Fe6538c91a0236351.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5434050085023046" frameborder="0" scrolling="no" height="245" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.6823807174805552" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F80a53d917836c741.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.6823807174805552" frameborder="0" scrolling="no" height="595" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.3355358773842454" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F75d065e109836b39.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.3355358773842454" frameborder="0" scrolling="no" height="307" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.7127358382567763" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F8f8d6d82d1a4df0f.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7127358382567763" frameborder="0" scrolling="no" height="277" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.4839935644995421" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F9b57762bda29db92.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4839935644995421" frameborder="0" scrolling="no" height="735" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

    提交代碼後就有了

    id="iframe_0.5994324621278793" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2Ff71ad10a843f6d8a.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.5994324621278793" frameborder="0" scrolling="no" height="735" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  6. 合併分支到主線

    id="iframe_0.7887943536043167" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F79d096deaba5e616.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7887943536043167" frameborder="0" scrolling="no" height="538" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.009689918486401439" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F3f79daf2f25344c3.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.009689918486401439" frameborder="0" scrolling="no" height="595" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.9156565936282277" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F68745c308af9b958.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.9156565936282277" frameborder="0" scrolling="no" height="595" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.16160089592449367" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F47426088f050bf94.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.16160089592449367" frameborder="0" scrolling="no" height="460" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  7. 提交主線代碼

    id="iframe_0.7300104678142816" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2Fae51c1efd41216c5.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7300104678142816" frameborder="0" scrolling="no" height="735" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

正式版本發佈

版本發佈只針對trunk的目錄進行發佈
現在開發任務已經完成,我們認爲這個版本已經很成熟,我們希望把這個版本定爲v1.0,我們現在可以刪除分支,同時將該版本打個標記

  1. 刪除分支

    直接刪除無用分支即可
    id="iframe_0.8674183038529009" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F5e6947f63c25faa9.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.8674183038529009" frameborder="0" scrolling="no" height="395" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

  2. 做v1.0的標記

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

    id="iframe_0.7181886043399572" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F58bd76416c995954.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7181886043399572" frameborder="0" scrolling="no" height="507" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

    切換到主線切出一個tags

    id="iframe_0.12184830219484866" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi3.piimg.com%2F2038c966a8c6cfeb.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.12184830219484866" frameborder="0" scrolling="no" height="583" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.9985880274325609" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F0d6c01422e0dd0b9.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.9985880274325609" frameborder="0" scrolling="no" height="302" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

bug修復

現在我們可能在開發2.*的版本了,突然發現1.0的版本有bug

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

    id="iframe_0.4477321691811085" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2Fbe7b29eab28821e2.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4477321691811085" frameborder="0" scrolling="no" height="583" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.7274274204391986" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F6534f0a9c2c72486.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7274274204391986" frameborder="0" scrolling="no" height="460" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.4515517703257501" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2Ff57644fbc8e55d9e.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4515517703257501" frameborder="0" scrolling="no" height="460" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.43182261078618467" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2Fd513e9d894eabced.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.43182261078618467" frameborder="0" scrolling="no" height="460" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

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

    id="iframe_0.630977455759421" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F90c4c99c87ae97f4.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.630977455759421" frameborder="0" scrolling="no" height="523" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.4391423335764557" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F6fcc73198b8d9f20.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.4391423335764557" frameborder="0" scrolling="no" height="460" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">
    id="iframe_0.7360051926225424" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi4.piimg.com%2F33e3ce82a4687f3e.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.7360051926225424" frameborder="0" scrolling="no" height="404" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

結束語

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

PS: 第一次用vs code編寫,還是挺好用的(●ˇ∀ˇ●)
id="iframe_0.06435651215724647" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fi2.piimg.com%2F70fec18ff5d3ffc3.png&maxWidth=848&origin=http://www.cnblogs.com&iframeId=iframe_0.06435651215724647" frameborder="0" scrolling="no" height="457" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 848px;">

發佈了14 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章