什麼是源代碼管理(版本控制)工具: 就是用來管理我們源代碼的一個軟體。
常見的源代碼管理工具/軟體:
1. CVS
開啟版本控制之門。1990年誕生,“遠古時代”的主流源代碼管理工具。
2. SVN —— 集中式(全稱 Subversion)
是集中式源代碼管理工具。它是版本控制之王,它是CVS的接班人,速度比CVS快,功能比CVS強大,在國内使用最為普遍(70%-90%),源代碼隻有在公司才可以拿走,公司為了維護利益采用SVN。
3. GIT —— 分布式
是分布式源代碼管理工具。目前被越來越多的開源項目使用,在國外比較火,國内還沒有大範圍普及,不在公司也可以被随意把源代碼拿走。
SVN
-
概念:
1> Repository 代碼倉庫,儲存代碼的倉庫
2> Server 伺服器,儲存所有版本的代碼倉庫
3> Client 用戶端,隻儲存目前使用者的代碼倉庫
4> 使用者名&密碼 通路代碼倉庫需要使用自己的”使用者名和密碼”,進而可以區分出不同的人對代碼做的修改
-
操作:
1> checkout 将伺服器上最新的代碼倉庫下載下傳到本地,”隻需要做一次”
2> update 從伺服器上将其他人所做的修改下載下傳到本地,”每天上班必須要做的事情”
3> commit 将工作送出到伺服器,”每天下班之前至少做一次”
-
SVN伺服器端的安裝配置:
使用源代碼管理工具,實際上是伺服器端在幫我們管理源代碼。寫完源代碼後,把源代碼托管到伺服器上,伺服器幫我們管理。當我們需要更新/送出源代碼時,隻需要去伺服器裡進行送出,在伺服器裡進行更新。
-
操作流程:
項目經理初始化項目:項目經理先在伺服器上建立一個代碼倉庫,然後程式員才能在這個代碼倉庫裡共享代碼。
1) 把伺服器倉庫裡全部代碼下載下傳到本地。這個操作一般是第一次做,以後每次隻需更新一下即可。下載下傳整個項目工程(隻做一次):
svn checkout 伺服器位址 --username=使用者名 --password=密碼
項目經理在本地初始化一個項目,即建立一個基礎項目。初始化完項目後,需要把建立的項目送出到伺服器上。以供其他人下載下傳。
2) 送出代碼(常用):
svn commit -m "注釋/備注
,即本次送出的描述,都送出了些什麼内容”
3) 下載下傳/更新代碼(常用):
svn update
-
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
【新人加入公司一般要做什麼事情】:
- 配置電腦和開發的軟體環境。
-
向項目經理要 SVN伺服器的位址 、SVN賬号、密碼。(項目經理會去SVN伺服器裡配置一個user,然後把你加入到代碼倉庫的某一個組裡面)
擷取公司項目代碼:svn checkout 伺服器位址 –username=使用者名 –password=密碼
- 需求文檔(知道:功能有哪些、界面有哪些、怎麼布局、詳細需要做哪些需求,産品人員提需求)
- 接口文檔(知道:怎麼去服務端請求資料)
- 效果圖 (界面布局的詳細參數,設計來做)
指令總結
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