SVN
SVN使用
-
基本操作
- svn checkout:把項目源碼下載到本地概漱,只需要做一次
- svn update:將本地的源碼更新至服務(wù)器的最新版本
- svn commit:將本地的源碼更新內(nèi)容提交到服務(wù)器
- 提醒:每天下班前commit可運行版本拄查,上班前update前一天所有代碼
-
SVN使用環(huán)境
- 要想利用SVN管理源代碼,必須得有2套環(huán)境
- 服務(wù)器
- 用于存儲客戶端上傳的源代碼
- 可以在Windows上安裝Visual SVN Server
- 大部分情況下,公司的開發(fā)人員不必親自搭建SVN服務(wù)器
- 客戶端
- 上傳本地的源代碼到服務(wù)器拯坟,或者更新服務(wù)器的代碼到本地蚊逢,保持同步
- 可以在Mac上使用命令行、Versions果善、Cornerstone、Xcode
- 開發(fā)人員就屬于客戶端這個角色
- 服務(wù)器
- 要想利用SVN管理源代碼,必須得有2套環(huán)境
Visual SVN Server軟件
-
服務(wù)器端安裝配置
- 在電腦上安裝虛擬機
- 安裝Visual SVN Server
- Standard Edition
- 倉庫地址系谐、安裝位置
- ServerPort 端口號:80
- start Visual SVN
- 面板介紹
- Repositories:創(chuàng)建倉庫
- users
- groups
- 如何創(chuàng)建倉庫
- 創(chuàng)建一個空的倉庫
- 設(shè)置權(quán)限
- Properties
- add - 把創(chuàng)建的manager添加進去
- read/write
- Properties
- 紅色的星號表示可以被訪問
- copyurl
- 在虛擬機里面復(fù)制copy的url打開
- 鏈接倉庫
- 虛擬機理解成為遠程服務(wù)器巾陕,本地的safari鏈接不上url
- 本地訪問的時候,是計算機名稱訪問的
- 其他地方訪問時通過ip地址
- 如何獲得ip地址(虛擬機里)
- cmd
- 輸入ipconfig
- 用ip地址把計算機的名稱換掉
- 彈框輸入用戶名和密碼就可以連接上倉庫了
- 創(chuàng)建文件Doc/Code
- 創(chuàng)建用戶(項目經(jīng)理要做的)
- name
- password
- confirmpassword
客戶端軟件使用
與xcode集成
項目經(jīng)理對項目進行初始化操作
1.項目經(jīng)理先創(chuàng)建一個空的倉庫纪他,創(chuàng)建用戶名(賬號:manager密碼:manager),設(shè)置訪問權(quán)限
-
2.項目經(jīng)理使用終端連接到SVN服務(wù)器鄙煤,并且把倉庫下載到本地
- 通過url連接上
- cd
- pwd看到當(dāng)前路徑
- 下載倉庫到本地
$ svn checkout http://172.16.3.128/svn/Demo/ -- username = manager -- password = manager
- 路徑為倉庫地址路徑
- 需要把計算機名稱改為ip地址
- 后面要跟上用戶名和密碼
- Demo
- Code
- .svn隱藏文件就是svn版本庫
- 如何查看隱藏文件
- 顯示隱藏文件
- $ defaults write com.apple.finder AppleShowAllFiles YES&&killallFinder
- 不顯示隱藏文件
- $ defaults write com.apple.finder AppleShowAllFiles NO &&killallFinder
- 如何查看隱藏文件
-
3.項目經(jīng)理進入到code路徑
- ls - la
- cd Code/
- pwd
4.項目經(jīng)理 創(chuàng)建空的文件 touch main.m
-
5.查看文件狀態(tài)
-
$ svn status
- 打印 ? main.m
- ?表示該文件沒有被svn管理
-
-
6.把main.m添加到SVN的版本庫
-
$ svn add
文件名(main.m) - 狀態(tài)變?yōu)锳 :A表示新添加了文件
-
-
7.把本地的修改(mian.m) 提交到遠程的倉庫
- $ svn commit - m"注釋" main.m
- m 表示message
注意:新創(chuàng)建的文件默認不會被SVN管理茶袒,需要使用add指令來添加
-
8.項目經(jīng)理命令行刪除文件
- $ svn remove main.m
- D :代表delegate,表示該文件被刪除
-
9.項目經(jīng)理把本地的更改提交到遠程的svn服務(wù)器
- $ svn commit - m "刪除了文件"文件名稱(可以省略)
-
svn相關(guān)命令行的簡寫
- svn checkout == svn co
- svn status == svn st
- svn commit == svn ci
- svn update == svn up
- svn remove == svn rm
ruby升級
因為準備項目中使用bootstrap,在安裝bootstrap過程中提示需要Ruby的版本在1.9.2以上梯刚,而且目前使用的Ruby版本是Mac系統(tǒng)自帶的1.8.7.所以需要對Ruby進行升級
-
安裝RVM
- RVM:Ruby version manager,ruby版本管理器,包括ruby的版本管理和gem庫管理
- curl- L get.rvm.io | bash - s stable
- 等待一段時間后就可以成功安裝好RVM
- $ source ~/.bashrc
- $ source ~/.bash_profile
- 測試是否安裝正常
- rvm - v
- 1.27.0說明升級好了
-
用RVM升級Ruby
- 查看ruby版本
- ruby - v
- 列出所有版本
- rvm list known
- 安裝ruby2.3
- rvm install 2.3
- ruby有很多依賴薪寓,會下載很多的包
- 再安裝cocoapods
- 查看ruby版本
-
svn如何查看版本信息
- cd
- 更新獲得最新的版本信息
- $ svn update
- 查看版本信息
- $ svn log
新同事加入開發(fā)涉及操作
- 給新同事分配一個SVN賬號 (賬號:zs密碼:zs)
- 新同事需要連接到SVN的遠程服務(wù)器亡资,下載倉庫到本地
- $ svn checkout http://172.16.3.168/svn/Demo/ -- username = zs -- password = zs
- 開兩個終端
- 一個項目經(jīng)理manager
- 給zs創(chuàng)建/分配賬號
- 項目經(jīng)理更新獲得最新的倉庫信息
- $ svn update |svn up
- 項目經(jīng)理創(chuàng)建一個人類
- touch Person.h Person.m
- $ svn status
- $ svn commit - m "創(chuàng)建了人"
- 一個是新同事zs
cd
svn checkout http://172.16.3.168/svn/Demo/ -- username = zs -- password = zs
cd
ls - la
zs開始開發(fā),創(chuàng)建了一個??類
$ touch Dog.h Dog.m
-
$ svn status
- ?? 沒有被svn管理呢
把新創(chuàng)建的文件向叉,添加到svn的版本庫里面
- $ svn add Dog.h Dog.m$ svn add * 把當(dāng)前路徑下面所有沒有被SVN管理的文件都添加到svn的版本庫中
- warning :不用理會查看狀態(tài) svn status
把本地的修改提交到遠程倉庫
- $ svn commit - m "創(chuàng)建了??類"Dog.h Dog.m
- Dog.h Dog.m可以省略不寫沟于,省略表示把所有文件的更改都提交到遠程倉庫
- 一個項目經(jīng)理manager
SVN版本回退操作
- svn log 查看版本信息
- 版本回退:
- 回到上一個版本
- 版本回退涉及的兩種情況
- 修改了內(nèi)容,但是該修改還沒有提交到svn倉庫植康,需要回退到最新的版本(取消當(dāng)前修改)
- zs
- cat Dog.h
- echo "wangwang" >>Dog.h
- cat Dog.h
- svn status
- M:表示該文件被修改
- 提交更改到遠程的服務(wù)器
- svn commit - m "修改了Dog.h文件"
- 繼續(xù)輸入信息
- echo "miaomiao" >> Dog.h
- 按鍵盤的上箭頭旷太,就可以查看狀態(tài)
- 取消更改(不在Dog.h里面輸入miaomiao)
- svn revert Dog.h
- zs
- 修改了內(nèi)容,并且該修改已經(jīng)被提交到SVN倉庫销睁,需要回退到上一個版本(取消修改)
- 修改了Dog.h文件
- 把修改的文件提交到SVN服務(wù)器
- $ svn commit - m "HelloDog" Dog.h
- 此時需要取消對Dog.h文件的修改(需要回退到上一個版本)
- 回退到特定的版本
- $ svn update - r(版本號)
- $ svn update - r9
- 不能直接commit(提交)供璧,如果客戶端的版本號,低于服務(wù)器端的版本號冻记,不能提交成功
- 回到最新版本 $ svn update
- 先更新回到最新的版本信息
- $ svn update
- 合并兩個版本的文件
- $ svn merge - r(當(dāng)前的版本號):r(要回退到的版本號) 文件名稱
- $ svn merge - r9 : r8 Dog.h
- U:版本回退的操作
- 重新提交更改到SVN服務(wù)器
- $ svn commit - m "Dog類回退到上一個版本" Dog.h
- 回退到特定的版本
- svn - log查看版本信息
- 修改了內(nèi)容,但是該修改還沒有提交到svn倉庫植康,需要回退到最新的版本(取消當(dāng)前修改)
多人開發(fā)可能會出現(xiàn)的沖突
- 項目經(jīng)理修改了main.m文件睡毒,往里面添加了一行內(nèi)容(版本號10)
- $ echo "main 項目經(jīng)理" >>main.m
- 項目經(jīng)理把修改提交到服務(wù)器(版本號11)
- $ svn commit - m "修改了文件,提交到倉庫" main.m
- 同一時間,zs也修改了main.m的同一位置(版本號10)
- $ echo "mian zs"
- 張三也提交修改到服務(wù)器冗栗,此時提示不能提交成功(報錯:版本已經(jīng)過期)
- $ svn commit - m "張三修改了文件演顾,提交"main.m(報錯 outofdate)
- 產(chǎn)生沖突原因:兩個人修改了同一個文件的同一個位置
- 解決:張三應(yīng)該先更新,獲得最新的版本信息隅居,一更新就會產(chǎn)生沖突
- $ svn update
- df 會列出哪里有沖突
- p 稍后處理
- mc 以我的為主
- tc 以服務(wù)器的為主钠至,服務(wù)器端的內(nèi)容就會覆蓋本地的
- 解決沖突的具體方法詳解(掌握)
tc:表示用服務(wù)器的內(nèi)容來覆蓋掉本地的內(nèi)容,此時本地的倉庫和服務(wù)器端的倉庫是一樣的
-
mc:表示使用客戶端的內(nèi)容來覆蓋掉服務(wù)器端的內(nèi)容胎源,并且本地的版本號會加1
- $ svn commit - m "我是zs" main.m
- 把更改提交到服務(wù)器棉钧,版本號+1,會把服務(wù)器端的內(nèi)容覆蓋掉
-
p:
- 表示延遲處理沖突涕蚤,需要手動解決沖突
- 向左向右和等號的提示宪卿,把不需要的刪掉的诵,向左、等號佑钾、向右的箭頭必須要刪除西疤,其余的可以隨便處理,一般情況下是都保留
- 通過命令行告訴svn沖突已經(jīng)被解決了
- $ svn resolved main.m
- 把修改提交到遠程的倉庫
- $ svn commit - m “解決了沖突”main.m
SVN圖形化界面工具簡單說明
-
圖形界面工具
- cornerstone
右鍵休溶,新建空的倉庫
右鍵瘪阁,新建兩個文件夾Code/Doc
創(chuàng)建管理者
配置權(quán)限 add 設(shè)置為可讀可寫
-
copyURL
- 把計算機的名稱改為ip,運行cmd-ipconfig
-
連接上遠程倉庫選中HTTP Server
- Protocol:HTTP
- Sever:ip地址
- Pepository path:路徑
- port:80
- Nickname:昵稱可以隨便傳
- 設(shè)置賬號密碼
-
把遠程倉庫下載到本地
- 左上角的checkout
- Check out As :名稱
- Where:放在哪個位置路徑下面
- When Complete:打開/nothing
- Revision:倉庫的版本號
- Format:git的版本號,一定要選擇1.7
-
項目初始化配置
- 創(chuàng)建一個項目邮偎,把項目放到code里面,不要勾選create git
- ? :文件當(dāng)前并沒有被SVN管理义黎,在這里是Xcode反應(yīng)遲鈍禾进,不需要做add操作
- 步驟:
-
先連接上遠程倉庫
-
把遠程倉庫下載到本地
- 使用xcode創(chuàng)建一個新的項目(該項目中的所有的文件,默認會被添加到當(dāng)前的svn版本庫中)
- 把本地的更改廉涕,提交到遠程的服務(wù)器倉庫
- 點擊commit指令之后會彈出一個框(該軟件識別出了幾個文件泻云,這幾個文件通常需要被忽略的),點擊ignore,輸入注釋狐蜕,然后點擊commit changes
-
- 設(shè)置倉庫的忽略文件
- 還有一些文件是需要忽略處理的
- 記錄斷點信息
- 導(dǎo)航菜單打開狀態(tài)的文件
- 步驟:
- 找到xuserdata文件(2個)然后手動刪除
- 把更改提交到遠程的倉庫
- 重新生成這兩個文件(隨便刪除項目中的一個空行宠纯,或者是打上一個斷點,然后運行程序)
- 關(guān)閉xcode,更新本地倉庫层释,重新提交本地的代碼到遠程的服務(wù)器婆瓜,xcuserdata就會被忽略(或者手動忽略,ignore)
- 先點擊commit贡羔,選中ignore,點擊commit changes 提交(報錯)-->先更新 然后再提交
- 還有一些文件是需要忽略處理的
- 總結(jié):使用cornerstone進行項目初始化并完成忽略操作
- 連接上倉庫廉白,并且下載到本地
- 使用xcode新創(chuàng)建一個項目到code文件路徑中,把xcode關(guān)閉
- 把本地的修改提交到svn服務(wù)器(commit) - 會彈出一個框乖寒,選中ignore,會默認的做一個忽略處理 - 彈出一個一個輸入注釋的界面猴蹂,點擊右下角commit andChange
- 繼續(xù)進行忽略操作,手動的刪除兩個XuserData文件(右鍵delete),把刪除操作提交到svn服務(wù)器(commit change)
- 重新生成這兩個文件(打開xcode楣嘁,隨意修改一點代碼磅轻,或者是添加一個代碼,運行程序就可以了)
- 手動的忽略這兩個文件然后提交 直接提交 在提交的時候選中ignore選項逐虚,提交發(fā)現(xiàn)報錯(本地的文件和服務(wù)器端的文件不一樣) -- 先更新然后再提交
- 驗證忽略操作已經(jīng)完成
- 在項目中修改某一個文件聋溜,點擊source control 點擊commit 提交如果修改了一個文件,提交的時候也只有一個文件顯示提交叭爱,那么就說明已經(jīng)完成忽略處理
- 圖形化界面工具多人開發(fā)的沖突處理
- 點擊?四種解決沖突的方法
- 選擇 左邊的或者右邊的勤婚,兩個都先保存一下
- 解決完沖突之后再提交
- 點擊?四種解決沖突的方法
Xcode使用storyboard注意點
- Xcode5之后支持已經(jīng)很好了
- 如果多人同時修改xib,沖突如何解決
- xib壞掉了不能打開
- 右鍵 open as - source code
- <?xml version >
- 先找到subviews(開始標簽)
- 找到結(jié)尾標簽(/subviews)
- 在開始和結(jié)尾之間找問題
- 嵌套包含的問題
- 手動調(diào)整
- 怎么解決約束混亂的問題
- textField的約束設(shè)置到了button里面了
- 手動調(diào)整涤伐,把屬于誰的約束給誰馒胆,更新約束
- 嵌套包含的問題
- xib壞掉了不能打開
- 建議
- 建議在開發(fā)中分工明確缨称,盡量避免多人同時修改一個文件
- 在開發(fā)中盡量每完成一個功能就提交一次,應(yīng)該在每次開發(fā)前都做一次更新操作
Xcode使用靜態(tài)庫注意點
- 靜態(tài)庫
- 想給別人用我的框架祝迂,又不想讓別人看到源文件和實現(xiàn)睦尽,打包成靜態(tài)庫就可以了
- regexLib(正則表達式:用戶名密碼的約束)
- .a文件是打不開的
- 可以把靜態(tài)庫理解為框架 ,把它拖到項目里
- I:表示忽略型雳,.a文件默認是忽略的当凡,需要手動完成添加操作
- showInfinder
- cd
- ls - la
- libRegex.a
- svn status
- svn add libRegex.a
- commit 添加了靜態(tài)庫文件
- I:表示忽略型雳,.a文件默認是忽略的当凡,需要手動完成添加操作
- 如果在項目中用了靜態(tài)庫,那么纠俭,.a文件默認是被忽略的沿量,需要使用命令行手動的對.a文件進行add操作,把靜態(tài)庫文件添加到SVN的版本庫中
使用Xcode進行checkout
- 李四加入開發(fā)冤荆,先分配一個SVN的賬號
- 李四不喜歡使用圖形界面工具朴则,喜歡使用Xcode
- 使用Xcode連接到倉庫,下載到本地
- 偏好設(shè)置preference
- Accounts 點擊+
- Address
- type
- authreiication
- 出現(xiàn)repository就表示連接到了
- 點擊checkout,通常在最下面钓简,選擇路徑乌妒,下載倉庫
SVN目錄規(guī)范的介紹(團隊負責(zé)人)
-
目錄規(guī)范
- trunk:主干,當(dāng)前開發(fā)項目的主目錄
- branches:分支目錄外邓,添加非主線功能的時候使用撤蚊,開發(fā)測試之后,可以合并到主干項目中
- tags:標記目錄损话,通常作為重大版本的備份
-
SVN目錄使用的案例
- 某團隊計劃開發(fā)一款陌陌項目
- 此項目初期已經(jīng)有部分基礎(chǔ)代碼
- 研發(fā)團隊在此基礎(chǔ)代碼上經(jīng)過3個月的努力侦啸,開發(fā)了一個功能相對完備的v1.0版本上線推廣,并取得了良好的效果(備份到tags)
- 由于市場反饋良好丧枪,團隊開始著手v2.0版本的開發(fā)工作
- 就在v2.0版本開發(fā)進行中匹中,發(fā)現(xiàn)v1.0版本中有一個嚴重的bug,如果不及時修改,將造成嚴重的后果
- 研發(fā)團隊收到bug報告后豪诲,立刻安排人員對v1.0版進行修復(fù)顶捷,但其他研發(fā)人員則繼續(xù)開發(fā)v2.0版本的新功能
- 修復(fù)bug的人員很快就找到問題的原因,并對bug進行了修復(fù)屎篱,并且發(fā)布了v1.1版本供用戶升級服赎,因此沒有造成重大的損失
- bug修復(fù)后,研發(fā)人員將修復(fù)后的代碼整合到研發(fā)主線中來交播,這樣就可以保證今后發(fā)布的后續(xù)版本中不會再出現(xiàn)此問題
- 就這樣重虑,整個團隊在大家的共同努力下,有條不紊的進行著
- 具體流程
- 某開發(fā)團隊開發(fā)了一款應(yīng)用
- 一段時間后秦士,1.0版本已經(jīng)開發(fā)完畢
- 商品上架缺厉,把1.0版本發(fā)布到appstore,對1.0版本進行備份
- 開發(fā)團隊繼續(xù)開發(fā)2.0版本
- 2.0版本開發(fā)到一半的時候,市場人員反饋發(fā)現(xiàn),1.0版本中存在重大的bug,需要馬上修復(fù)
- 開發(fā)團隊指派一個人(zs)修復(fù)1.0版本的bug,其他的人員繼續(xù)在主干中開發(fā)2.0版本
- zs先把1.0版本(備份)拷貝一份提针,建立一個分支
- 在分支中解決bug
- 修復(fù)了1.0版本bug的新版本命爬,命名為1.1版本
- 商品上架,把1.1版本發(fā)布到appstore,對1.1版本進行備份
- 在主干上面合并分支辐脖,解決正在開發(fā)的2.0版本中也存在的bug
- 刪除分支饲宛,繼續(xù)開發(fā)2.0版本
SVN演練
- 打開虛擬機
- 創(chuàng)建一個倉庫MOMO,創(chuàng)建一個標準的倉庫嗜价,生成三個文件夾艇抠,默認沒有任何人訪問
- 創(chuàng)建用戶,設(shè)置權(quán)限
- copyURL,連接上倉庫
- 使用圖形界面工具
- 連接倉庫久锥,下載倉庫到本地
- Xcode完成初始化處理
- 創(chuàng)建項目家淤,放到trunk文件夾下面
- commit - ignore
- 手動刪除繼續(xù)忽略的文件 - commit
- 重新生成這兩個文件(空行、斷點瑟由、運行)絮重,提交(或者手動忽略),更新操作错妖,再點擊commit
- 修改文件,使用xcode提交疚沐,只提交一個文件暂氯,說明忽略操作已經(jīng)完成
- 開始開發(fā)1.0 - 提交
- 開發(fā)完畢1.0 - 提交
- 對1.0版本進行備份
- 圖形界面工具中,右鍵tag
- log message :完成了1.0版本momo的開發(fā)亮蛔,基本功能 - 提交tags里面就有了備份痴施,更新本地客戶端
- 開發(fā)團隊繼續(xù)開發(fā)2.0版本 - 提交
- 發(fā)現(xiàn)1.0版本中存在一個bug - commit
- 指派項目經(jīng)理修復(fù)1.0版本的bug,建立一個分支
- 先把1.0版本拷貝一份(branches) momo1.0
- 本地客戶端更新操作
- 項目經(jīng)理開始修復(fù)bug
- 刷新command + r ,然后再進行備份 tag ,1.1版本究流,版本的功能commit
- 其他人員在主干上繼續(xù)開發(fā)2.0版本
- 解決主干trunk上面的bug,合并分支(操作本地倉庫辣吃,選中本地的主干,點擊merge芬探,如果有驚嘆號需要更新一下神得,merge from),commit提交
- 刪除分支偷仿,右擊delete(注意:刪除分支要連接遠程服務(wù)器位置刪除分支)