天天看點

版本控制 - SVN常見的源代碼管理工具/軟體:SVN指令總結

什麼是源代碼管理(版本控制)工具: 就是用來管理我們源代碼的一個軟體。

常見的源代碼管理工具/軟體:

1. CVS

        開啟版本控制之門。1990年誕生,“遠古時代”的主流源代碼管理工具。

2. SVN —— 集中式(全稱 Subversion)

        是集中式源代碼管理工具。它是版本控制之王,它是CVS的接班人,速度比CVS快,功能比CVS強大,在國内使用最為普遍(70%-90%),源代碼隻有在公司才可以拿走,公司為了維護利益采用SVN。

3. GIT —— 分布式

        是分布式源代碼管理工具。目前被越來越多的開源項目使用,在國外比較火,國内還沒有大範圍普及,不在公司也可以被随意把源代碼拿走。

SVN

  1. 概念:

            1> Repository 代碼倉庫,儲存代碼的倉庫

            2> Server 伺服器,儲存所有版本的代碼倉庫

            3> Client 用戶端,隻儲存目前使用者的代碼倉庫

            4> 使用者名&密碼 通路代碼倉庫需要使用自己的”使用者名和密碼”,進而可以區分出不同的人對代碼做的修改

  2. 操作:

            1> checkout 将伺服器上最新的代碼倉庫下載下傳到本地,”隻需要做一次”

            2> update 從伺服器上将其他人所做的修改下載下傳到本地,”每天上班必須要做的事情”

            3> commit 将工作送出到伺服器,”每天下班之前至少做一次”

  3. SVN伺服器端的安裝配置:

            使用源代碼管理工具,實際上是伺服器端在幫我們管理源代碼。寫完源代碼後,把源代碼托管到伺服器上,伺服器幫我們管理。當我們需要更新/送出源代碼時,隻需要去伺服器裡進行送出,在伺服器裡進行更新。

  4. 操作流程:

            項目經理初始化項目:項目經理先在伺服器上建立一個代碼倉庫,然後程式員才能在這個代碼倉庫裡共享代碼。

            1) 把伺服器倉庫裡全部代碼下載下傳到本地。這個操作一般是第一次做,以後每次隻需更新一下即可。下載下傳整個項目工程(隻做一次):

    svn checkout 伺服器位址 --username=使用者名 --password=密碼

            項目經理在本地初始化一個項目,即建立一個基礎項目。初始化完項目後,需要把建立的項目送出到伺服器上。以供其他人下載下傳。

            2) 送出代碼(常用):

    svn commit -m "注釋/備注

    ,即本次送出的描述,都送出了些什麼内容”

            3) 下載下傳/更新代碼(常用):

    svn update

  5. SVN的使用環境

    要想利用SVN管理源代碼,必須得有2套環境

    1) SVN伺服器:

            用于存儲用戶端上傳的源代碼

            可以在Windows上安裝 Visual SVN Server 軟體

             http://www.visualsvn.com/server/download/

            大部分情況下,公司的開發人員不必親自搭建SVN伺服器,項目經理會搭建。

    2) 用戶端 :

            上傳本地的源代碼到伺服器,或者更新伺服器的代碼到本地,保持同步 。可以在Mac上使用指令行、Versions、Cornerstone、Xcode圖形化管理軟體(這些軟體的本質是內建了指令,是對指令進行了封裝)

            開發人員就屬于用戶端這個角色

    3) UNIX常用指令

cd  改變工作目錄
pwd 輸出目前工作目錄的絕對路徑

在UNIX中要執行什麼指令,一定要知道自己目前所在的工作目錄
    ls   檢視檔案
    ls -a  顯示所有檔案
    ls -l  清單顯示檔案
    ls -la 清單顯示所有檔案

建立檔案:touch main.m 
打開檔案:open main.m
連續檢視檔案内容:cat main.m
分頁檢視檔案内容(分頁檢視:内容太多會分頁):more main.m

檢視svn有哪些指令:svn help 
錯誤提示:"is not a working copy",必須在svn的工作目錄下才能正确使用svn的指令
檢視檔案的狀态(判斷檔案是否已添加到代碼倉庫):svn status

第列本地檔案狀态說明:描述檔案被添加、删除或其他修改

    '?' 建立的檔案還沒有被添加到本地倉庫管理裡。svn不識别該檔案,或者該檔案被删除過, 或者該檔案是新添加的檔案還沒有被本地代碼倉庫進進行管理。
    'A' 檔案被添加到本地代碼倉庫,但是還未添加到伺服器中(伺服器的倉庫還未管理該檔案)檔案已經被添加到本地倉庫管理中(執行了svn add指令),但是還未添加到伺服器中(伺服器的倉庫還未管理該檔案)。
    'M' 本地檔案被修改。該檔案已經被本地倉庫管理,并且伺服器倉庫也有該檔案。該狀态表示新修改了檔案,修改的内容還沒有被送出到伺服器。
    'D' 被删除。該檔案已經在本地進行了删除,但是還沒有将删除操作共享給伺服器。
    ' ' 沒有修改
    'C' 沖突
    'I' 被忽略
    'R' 被替換
    'X' 外部定義建立的版本目錄
    '!' 檔案丢失或者不完整(不是通過svn指令删除的檔案)
    '~' 受控檔案被其他檔案阻隔
--------------------------------------------------------
将新的檔案添加到SVN本地代碼倉庫中:svn add main.m 
    (用touch建立的檔案,必須要寫這條指令;如果是用Xcode建立的檔案,Xcode會自動幫我們添加到本地倉庫中,不需要再執行add指令)

将本地倉庫中的檔案送出到伺服器倉庫中:svn commit -m “注釋”
解決沖突:svn resolved person.h
檢視更新的版本日志:svn log
           

【新人加入公司一般要做什麼事情】:

  1. 配置電腦和開發的軟體環境。
  2. 向項目經理要 SVN伺服器的位址 、SVN賬号、密碼。(項目經理會去SVN伺服器裡配置一個user,然後把你加入到代碼倉庫的某一個組裡面)

    擷取公司項目代碼:svn checkout 伺服器位址 –username=使用者名 –password=密碼

  3. 需求文檔(知道:功能有哪些、界面有哪些、怎麼布局、詳細需要做哪些需求,産品人員提需求)
  4. 接口文檔(知道:怎麼去服務端請求資料)
  5. 效果圖 (界面布局的詳細參數,設計來做)

指令總結

1.  将伺服器完整的代碼下載下傳到本地(隻做一次)
    svn checkout 伺服器位址 --username 使用者名 --password 密碼
2.  将檔案添加到svn本地倉庫管理(隻限用指令touch建立的檔案,用Xcode建立的檔案省略這一步)
    svn add 檔案名
3.  送出代碼
    svn commit -m "送出的注釋說明"
4.  更新代碼
    svn update  
           

檔案沖突:

• 報錯:…out of date:檔案過期

• 解決:

把本地的代碼更新到最新版本,再送出。

再送出如果有沖突(conflict)需解決一下沖突問題,再送出就OK。

• 什麼情況下不能送出代碼?

當本地的版本号小于伺服器的版本号時代碼是不能送出。

• 出現沖突時,終端會讓你選擇下一步的操作select:

(p) postpone:對比所有的沖突(會生成幾個臨時檔案)。

(mc) mine-conflict:使用我的。當發生代碼沖突的時候,使用我的代碼。覆寫伺服器代碼。

(tc) theirs-conflict:使用對方的。當發生代碼沖突的時候,使用伺服器的代碼。覆寫本地代碼。

注意:使用mc和tc總會覆寫一個人的代碼。

沖突代碼對比:
<<<<<<<< .mine
表示該位置是我的代碼
=============
該位置是伺服器的代碼
>>>>>>>> .r11 
           

SVN版本回退:

思路一:

○ 本地回退到第6個版本:svn update -r 6

○ 然後對本地版本6進行少許編輯,目的是再送出使産生沖突。

○ 沖突後,選擇使用我的代碼(mc)以送出後覆寫服務端的代碼。

○ 送出:svn commit -m “回退到第六個版本”

思路二(推薦):

○ 本地回退到第6個版本的内容。合并指令:svn merge -r 11:6 main.m

(将檔案mian.m的内容從 版本11的内容 回退到 版本6的内容)

○ 送出:svn commit -m “回退到第六個版本”

Cornerstone 圖像化管理工具

1. 添加一個遠端倉庫(可以通過圖形化界面工具檢視遠端倉庫裡有哪些代碼,之前我們是通過浏覽器和伺服器才能檢視)

點選Add Repository —》選擇HTTP Server —》填寫伺服器位址、端口、路徑、昵稱、使用者名、密碼。

2. 導出代碼庫到本地,點選checkout按鈕下載下傳整個倉庫

3. 本地目錄下使用Xcode建立項目(注意:不要勾選 git,兩套源代碼管理同時存在會發生沖突)

4. 送出代碼(一般不用xcode來送出源代碼,因為會送出一些無效的代碼,如:記錄、日志、路徑配置等檔案)

注意:多個人不能同時修改storyboard,這樣很容易出現沖突,不好修改。
           

如何上傳靜态庫?

打包成靜态庫(.a檔案),可以把一些檔案打包成.a靜态庫。(如,可以把所有的.m檔案打包成靜态庫)

.a靜态庫必須使用指令行才能把它加入到我們的本地倉庫管理裡。

如:svn add libRegex.a

忽略一些不需要上傳的檔案:

送出檔案時需要忽略的檔案有(送出的檔案要都是别人用得着的檔案):

xcode的配置檔案:

xcshareddata檔案:記錄了遠端倉庫的位址,每個人都有自己的遠端倉庫位址,你不需要把自己的位址共享給别人。

xcuserdata檔案:它裡面包含了檔案夾的打開結構/目前使用者停留在哪一個檔案中/使用者打的斷點。

項目經理初始化項目時,需要删除一些不需要的檔案(如配置檔案、這些檔案在開發中不需要每個人都送出),删除後,程式員在開發中送出代碼時就會自動忽略掉這些不需要的檔案。

SVN倉庫目錄結構:

• trunk(主幹目錄:項目最新版本的開發目錄,目前項目正在開發的版本,通常進入公司之後在該目錄下開發)

• tags(備份目錄:做重大項目版本的備份,可以備份項目的某一個版本。一般存放已經上線的重大版本)

• branches(分支目錄:做舊版本修複。操作步驟:先把備份目錄中的需要修複的版本項目拷貝到分支目錄中,然後進行修複工作,修複完後再把修複的版本在tags目錄下備份一份,最後把修複的版本和trunk主幹目錄下的最新版本進行合并)

當曆史版本發生重大bug或者有新需求時,需要在branches目錄下進行開發。

SVN思維導圖:

SVN筆記PPT