前言:
1.本文講的是SVN版本控制工具常用功能愚争,包括命令行和界面化操作
2.如果想了解GIT使用方式,請移步這里 git使用
SVN使用環(huán)境
- 使用SVN管理源代碼央串,必須有2套環(huán)境
- 服務器
- 用來存儲客戶端上傳的源碼
- 一般都是在Windows環(huán)境下安裝Visual SVN Server
- 大部分情況下,不是由開發(fā)人員搭建SVN服務器
- 客戶端
- 用來提交丈莺、回退、修改拐迁、下載等操作
- 服務器
在Windows安裝Visual SVN Server
- 下載Visual SVN Server安裝包
- 打開安裝包 --> next --> 同意協(xié)議 --> next --> 選擇默認選項(安裝SVN控制臺)--> next --> 選擇第一個按鈕(標準版)--> next --> location:安裝路徑 Repositories:倉庫路徑 server Port:端口 旁邊的https://選項不勾選(因為一般SVN都是在局域網(wǎng)蹭劈,不會有安全問題)--> next -->Install --> 完成
創(chuàng)建SVN倉庫
- 打開Visual SVN Server
- 右擊Repositories --> 新建 --> Repository --> 設置倉庫名稱 --> 下一步 --> 選擇第一項Enpty repository(空的倉庫)--> 下一步 --> 設置訪問權限(Nobody has access<無人能訪問>疗绣、All Subversion users have Read/Write access<所有人可以讀寫>线召、Customize permissions<自定義訪問>)因為是初始化倉庫,所以先設置為沒人能訪問 --> 下一步 --> 完成
SVN倉庫配置
- 在新建的倉庫中新建2個文件夾(Code多矮、Doc):新建 --> Folder --> 文件夾名稱 --> 完成
- 創(chuàng)建用戶:右擊Users --> Create user --> User name:用戶名 Password:密碼 Confirm password:確認密碼 --> 完成
- 創(chuàng)建用戶組(iOS缓淹、Android):右擊Groups --> Create Group --> Group name:組名 --> Add:增加成員 --> 完成
- 配置倉庫用戶權限:右擊倉庫 --> Properties --> Add:添加成員或組 --> Permissions:設置權限(NO Access<無權限>、Read Only<只讀>塔逃、Read/Write<可讀可寫>)--> 應用
- 配置完成
測試SVN倉庫鏈連接是否正常
- 連接倉庫分為測試連接和遠程連接2種
- 測試連接:也叫本地連接讯壶,就是在搭建SVN的服務器上測試是否可以連接,步驟如下:
- 右鍵倉庫 --> Copy URL to Clipboard --> 打開瀏覽器 --> 在地址欄粘貼(我這邊的地址:http://yeshaoji-ef1f42/svn/test/)并回車 --> 輸入用戶名密碼 --> 這樣就連接上倉庫了
- 測試連接:也叫本地連接讯壶,就是在搭建SVN的服務器上測試是否可以連接,步驟如下:
- 遠程連接:測試完畢后就可以將地址發(fā)放給成員使用了
- 服務器地址獲取方式
- 在服務器端打開命令行工具 --> $ ipconfig --> IP Address就是我們服務器地址
- 拼接鏈接地址
- 格式:http://服務器地址/SVN倉庫路徑 (比如我的:http://172.16.153.128/svn/test/)
- 使用者打開瀏覽器 --> 在地址欄粘貼并回車 --> 輸入用戶名密碼 --> 這樣就連接上倉庫了
管理者初始化項目
- 將遠程倉庫下載到本地
- 進入我們需要放置的文件件下
- $ cd /Users/yeshaojian/Desktop/SVN/mgr
- 連接并下載
- $ svn checkout 倉庫路徑 --username=用戶名 --password=密碼
- 下載成功后湾盗,在我們的文件夾下會出現(xiàn)下載下來的倉庫伏蚊,倉庫里面有.svn的隱藏文件(顯示和隱藏mac上文件的方法)
- 進入本地倉庫
- $ cd 本地倉庫目錄(就是有.svn隱藏文件的目錄)
- 進入本地倉庫
- 創(chuàng)建文件 main.m
- $ touch main.m
- 查看文件狀態(tài)
- $ svn status
說明:
1.?表示該文件不受SVN管理
2.A表示該文件受SVN管理
3.M表示該文件被修改
- $ svn status
- 將文件添加到svn管理中
- $ svn add main.m (也可使用 $ svn add * <表示提交所有文件>)
- 將main.m文件提交到遠程倉庫
- $ svn commit main.m -m "注釋"
- 進入我們需要放置的文件件下
新成員使用SVN和多人開發(fā)
新成員篇:
- 第一次加入項目需要進行下面操作
- 獲取到SVN賬號與密碼與遠程倉庫路徑
- 連接遠程倉庫并將倉庫下載到本地
- 進入我們需要放置的文件件下
- $ cd /Users/yeshaojian/Desktop/SVN/newTest
- 連接并下載
- $ svn checkout 倉庫路徑 --username=用戶名 --password=密碼
- 添加文件
- $ touch test1.m test2.m test3.m
- 查看文件狀態(tài)
- $ svn status
- 將不受SVN管理的文件添加到管理中
- $ svn add test1.m test2.m test3.m
- 將文件提交到遠程倉庫
- $ svn commit test1.m test2.m test3.m -m "注釋" 或者 $ svn commit -m "注釋"(不寫表示全部提交)
- 進入我們需要放置的文件件下
- 在后面的開發(fā)中(多人開發(fā))就只根據(jù)需要提交代碼就可以了:
管理者篇:
- 管理者加入開發(fā)步驟:
- 進入我們需要放置的文件件下
- $ cd /Users/yeshaojian/Desktop/SVN/mgr
- 更新代碼
- $ svn update
- 在test1.m文件中修改文件內(nèi)容,上傳服務器
- $ svn commit -m "注釋"
- 進入我們需要放置的文件件下
新成員篇:
- 進入我們需要放置的文件件下
- $ cd /Users/yeshaojian/Desktop/SVN/newTest - 新成員更新服務器上的代碼到本地
- $ svn update
- 提交代碼到遠程倉庫
- $ svn commit -m "注釋"
注意:每次要修改前先更新一下代碼再進行修改格粪。
SVN命令行方式刪除文件
- SVN不能使用普通的右鍵刪除方式刪除文件
- 使用命令行刪除
- $ svn remove test3.m
- 為確認文件被刪除躏吊,查看下狀態(tài)
- $ svn status
說明:
1.?表示該文件不受SVN管理
2.A表示該文件受SVN管理
3.M表示該文件被修改
4.D表示該文件已被刪除
- $ svn status
- 提交更改
- $ svn commit -m "刪除了test3.m文件"
- 別的成員修改前需要更新代碼,才能繼續(xù)操作
- $ svn update
SVN一些命令行簡寫
- 最常用的簡寫
- checkout --> co
- status --> st
- commit --> ci
- update --> up
SVN版本查看和回退
-
SVN查看版本信息很簡單帐萎,使用下面指令就可以
- $ svn log
-
SVN中有2中恢復或回退的情況比伏,下面會介紹:
- 情況一:我們本地修改了文件,但還沒有提交到服務器
- 解決方法:$ svn revert 需要恢復的文件
- 情況一:我們本地修改了文件,但還沒有提交到服務器
- 情況二:回退到以前的版本
- 首先要先更新本地版本到最新版
- $ svn update 版本
- 解決方法:
1.查看歷史版本
- $ svn log
2.合并版本
- $ svn merge -r版本:版本 .(比如現(xiàn)在最新版本為9 --> $ svn merge -r9:r5 .)
說明:這邊會提示“U”標識疆导,表示該文件為合并狀態(tài)
注意:這邊最后面的 "." 要敲赁项,表示當前目錄
- 提交到遠程服務器
- $ svn commit -m "注釋"
多人開發(fā)常見沖突解決
- 場景描述:多個人同時修改了同一個文件的同一個地方,且有人已經(jīng)提交到遠程倉庫澈段,后面的人還在繼續(xù)開發(fā)悠菜,且后面開發(fā)的人不是最新版本了,所以無法提交(SVN中如果遠程服務器版本大于要提交的版本败富,就無法提交)李剖,這樣的情況下就需要通過下面的步驟解決:
-
先獲取最新版本(這時會提示沖突,并給出了解決方案囤耳,因為我們修改了同一文件的同一個地方)
- $ svn update
提示:在提示解決方案中篙顺,經(jīng)常用到的是以下幾項
- (p) postpone:延遲處理 (最常用,先不解決)
- (mc) mine-conflict:以我的為準充择,覆蓋掉倉庫
- (tc) theirs-conflict:以原創(chuàng)倉庫為準德玫,覆蓋掉本地版本
- (s) show all options:顯示所有選項 方式一:這邊選擇mc(以我的為準)--> 回車
說明:如果看到顯示了大寫的 "G" 就說明沖突已經(jīng)解決-
提交
- svn commit -m "覆蓋了遠程倉庫代碼,解決沖突"
方式二:這邊選擇tc (以遠程版本為準椎麦,覆蓋掉本地版本) --> 回車
-
提交
- svn commit -m "添加了某某屬性宰僧,但不成功,稍后添加"
注:因為此次提交不會有提示观挎,因為本地版本和遠程版本一樣
- svn commit -m "添加了某某屬性宰僧,但不成功,稍后添加"
-
方式三:這邊選擇p(延遲處理)--> 回車
- 這時我們的本地倉庫內(nèi)會多生成3個文件琴儿,這是我們需要手動解決相應的問題
- 打開沖突文件段化,根據(jù)沖突提示進行相應修改
- 修改完成后,告訴遠程倉庫造成,我們已經(jīng)解決沖突
- $ svn resoved 沖突文件名
- 提交
- $ svn commit -m "手動解決了沖突"
-
SVN圖形化管理軟件(Cornerstone)使用
- Cornerstone界面介紹
- 初始化項目管理
- 連接SVN服務器 --> 左下角(REPOSITORIES)欄的 “+” 號 --> 選擇HTTP Server --> 填寫相應信息后點擊Add
- 下載遠程倉庫內(nèi)容到本地 --> 點擊左上角的Check out --> 選擇需要保存的位置 --> 打開下面的隱藏選項 --> 將Format選項調(diào)制最高(不然可能出現(xiàn)未知錯誤)--> check out --> 完成
- 創(chuàng)建項目 --> 文件存放位置為SVN的工作區(qū)的Code中
- 忽略不需要管理的文件 --> Cornerstone --> 點擊Commit --> 在彈出的對話框中選擇ignore(忽略) --> 打開項目中的.xcodeproj --> project.xcworkspace --> 刪除2個xcuserdate文件 --> 提交 --> 修改項目中的任意地方(比如打個斷點或者聲明變量等) --> 運行項目 --> 回到Cornerstone --> 會發(fā)現(xiàn)剛剛刪除的2個文件又出現(xiàn)了 --> 分別右擊選擇Ignore --> 然后更新倉庫版本 --> 提交
- 測試文件是否忽略成功 --> 隨便修改任意文件 --> 點擊Source Control --> Commit --> 發(fā)現(xiàn)只有我們修改的文件需要提交怎么已經(jīng)成功忽略文件
- 這樣項目的初始化就完成了显熏,以后就只需要用XCode來進行版本控制操作就可以了,不需要再進行忽略文件操作