引言
為什么使用SVN姥闪?在企業(yè)工作時(shí)始苇,經(jīng)常需要團(tuán)隊(duì)配合,這時(shí)一份工程需要多個(gè)人共
同維護(hù)筐喳,業(yè)內(nèi)稱之為多人聯(lián)編催式。聯(lián)編的方式有很多種函喉,最原始的方式就是A寫完代
碼a,B寫完代碼b....M寫完代碼m,然后由N負(fù)責(zé)把a(bǔ)到m的所有代碼進(jìn)行整合荣月,而
且N需要和所有人溝通管呵,對(duì)所有代碼都很清晰,整合時(shí)不能夠出現(xiàn)差錯(cuò)哺窄,否則代碼
就有可能達(dá)不到預(yù)期效果捐下。很顯然這個(gè)工作是非常繁重而且效率非常低的。作為地
球上最智慧的一群人萌业,我們?cè)趺茨苋萑踢@種低效率的工作呢坷襟。所以誕生了很多聯(lián)編
工具,幫助我們自己解決各種問題生年。其中應(yīng)用最廣泛的莫過于SVN了婴程,當(dāng)然目前git
以其先進(jìn)敏捷的特點(diǎn),得到越來越多人的認(rèn)可和使用抱婉,著名程序猿交友網(wǎng)站
Github就是提供git服務(wù)的網(wǎng)站档叔。git和SVN的區(qū)別
定義
百度百科給出SVN的定義:
SVN是Subversion的簡(jiǎn)稱,是一個(gè)開放源代碼的版本控制系統(tǒng)授段,相較于RCS蹲蒲、CVS,它采用了分支管理系統(tǒng)侵贵,它的設(shè)計(jì)目標(biāo)就是取代CVS届搁。互聯(lián)網(wǎng)上很多版本控制服務(wù)已從CVS遷移到Subversion窍育。說得簡(jiǎn)單一點(diǎn)SVN就是用于多個(gè)人共同開發(fā)同一個(gè)項(xiàng)目卡睦,共用資源的目的。
搭建SVN服務(wù)器
服務(wù)器的作用就如同引言中所說的工程師N的作用漱抓,負(fù)責(zé)整合代碼表锻,并且還能記錄版本信息。
服務(wù)器的搭建過程非常簡(jiǎn)單乞娄,我們以Windows為例瞬逊,使用基于Apache構(gòu)建的VisualSVN,可以
快速簡(jiǎn)單地搭建出SVN服務(wù)器仪或。
- windows 環(huán)境請(qǐng)參考:使用VisualSVN Server搭建服務(wù)器
任何一臺(tái)連接在局域網(wǎng)中的windows電腦都可以變成SVN服務(wù)器确镊,如果把SVN托管到公網(wǎng)中,
那么在世界任何角落你都可以開心的提交你的代碼了范删,常見于跨國(guó)蕾域、跨地區(qū)合作。 - Mac 環(huán)境請(qǐng)參考:Mac環(huán)境下svn的使用
使用SVN
在Mac OS X中到旦,使用SVN可以使用命令行工具旨巷,也可以使用各種軟件巨缘。我們先從命令行講起,介紹幾個(gè)簡(jiǎn)單的SVN命令采呐。
SVN基本命令:
1. 啟動(dòng)svn服務(wù)器
svnserve -d -r /Users/apple/svn
或者輸入:svnserve -d -r /Users/apple/svn/mycode
2. 結(jié)束服務(wù)
killall -9 svnserve
3. CheckOut:將文件checkout到本地目錄
svn checkout path(path是服務(wù)器上的目錄)
例如:svn checkout svn://192.168.1.1/pro/domain
簡(jiǎn)寫:svn co
4. Add:往版本庫中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加當(dāng)前..目錄下所有的php.文件)
5. Commit:將改動(dòng)的文件提交到版本庫
svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果選擇了保持鎖若锁,就
使?用–no-unlock開關(guān))
例如:svn commit -m “add test file for my test“ test.php
簡(jiǎn)寫:svn ci
日常提交更改過的代碼到服務(wù)器:
1. 打開終端,先定位到/Users/apple/Documents/code目錄懈万,輸入:
cd /Users/apple/Documents/code
2. 輸入提交指令:svn commit -m "修改日志說明"
6. Lock:unLock:加鎖/解鎖
svn lock -m "LockMessage" [--force] PATH
例如:svn lock -m "lock test file" test.php
svn unlock PATH
7. Update:更新到某個(gè)版本
svn update -r m path
例如:
svn update 如果后面沒有目錄拴清,默認(rèn)將當(dāng)前目錄以及子目錄下的所有文件都更新到最新版本靶病。
svn update -r 200 test.php(將版本庫中的.文件test.php還原到版本200)
svn update test.php(更新会通,于版本庫同步。如果在提交的時(shí)候提示過期的話娄周,是因?yàn)闆_突涕侈,需要先update,修改文件煤辨,然后清除svn resolved裳涛,最后再提交commit)
簡(jiǎn)寫:svn up
日常更新服務(wù)器端的代碼到客戶端
1. 打開終端,先定位到/Users/apple/Documents/code目錄众辨,輸入:
cd /Users/apple/Documents/code
2. 輸入指令:svn update
8. Status:查看文件或者目錄狀態(tài)
1. svn status path(目錄下的文件和子目錄的狀態(tài)端三,正常狀態(tài)不顯示)
【?:不在svn的控制中;M:內(nèi)容被修改鹃彻;C:發(fā)生沖突郊闯;A:預(yù)定加入到版本庫;K:被鎖定】
2. svn status -v path(顯示文件和子目錄狀態(tài))
第一列保持相同蛛株,第二列顯示工作版本號(hào)团赁,第三和第四列顯示最后一次修改的版本號(hào)和修改人。
注:svn status谨履、svn diff和 svn revert這三條命令在沒有網(wǎng)絡(luò)的情況下也可以執(zhí)行的欢摄,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
簡(jiǎn)寫:svn st
9. Delete:刪除文件
svn delete path -m "delete test file"
例如:
svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
或者直接svn delete test.php 然后再svn ci -m "delete test file" 推薦使用這種
簡(jiǎn)寫:svn (del, remove, rm)
10. Log: 查看日志
svn log path
例如:svn log test.php 顯示這個(gè)文件的所有修改記錄笋粟,及其版本號(hào)的變化
提示:此處如果報(bào)錯(cuò)Item is not readable怀挠,則需要在
svnserve.conf 文件中,設(shè)置 anon-access = none。
11. Info:查看文件詳細(xì)信息
svn info path
例如:svn info test.php
12. Diff:比較差異
svn diff path(將修改的文件與基礎(chǔ)版本比較)
例如:svn diff test.php
svn diff -r m:n path (對(duì)版本m和版本n比較差異)
例如:svn diff -r 200:201 test.php
簡(jiǎn)寫:svn di
SVN圖形界面工具軟件
SVN圖形界面工具軟件有很多害捕,在Mac環(huán)境下可以使用Versions绿淋、Cornerstone等等,這里我們只介紹一下Cornerstone的使用吨艇。
- Checkout
- Add
- Delete
- Revert
- Commit
- Update Update的重點(diǎn)在于如何解決沖突
遇到的問題
- 在 Xcode 8.1 上使用 source control —> commit時(shí)報(bào)錯(cuò):
The working copy “XXX” failed to commit files.Couldn’t communicate with a helper application.
解決方法::這里的提示可能只是svn幫助工具的一般處理躬它,真正原因提示的并不是很明確,可以打開終端(command-line tool)使用命令行查看具體原因东涡,然后再具體解決冯吓。代碼如下:
$ cd [path] //cd到項(xiàng)目根目錄里
$ svn commit -m "這里寫提交日志說明"
如果沒問題的話會(huì)顯示上傳信息倘待,有問題的話會(huì)輸出錯(cuò)誤原因,我這里提示的是:
svn: E155010: Commit failed (details follow):
svn: E155010: '/Users/apple/Desktop//APP/Demo/Demo/Assets.xcassets/Others/appicon.imageset/appicon.png' is scheduled for addition, but is missing
大概意思是之前在Assets.xcassets里計(jì)劃增加的圖片消失產(chǎn)生了錯(cuò)誤组贺,我找到了名稱為:appicon 的Image Set凸舵,鍵盤Del刪除之后再重新添加,再去commit就可以提交了失尖。
總結(jié)::日常最好是通過Xcode添加和刪除文件啊奄,以便正確更新svn狀態(tài)(使用Finder操作文件可能會(huì)導(dǎo)致svn沒法更新)。 如果發(fā)生提交錯(cuò)誤掀潮,請(qǐng)轉(zhuǎn)到命令行并使用svn status獲取提示菇夸,出現(xiàn)錯(cuò)誤,并從命令行進(jìn)行修復(fù)仪吧。
# On OSX using sourcetree / git-svn getting “Can't locate SVN/Core.pm in @INC ”
解決方法庄新,實(shí)測(cè)有效:
sudo ln -s /Library/Developer/CommandLineTools/Library/Perl/5.18/darwin-thread-multi-2level/SVN /Applications/SourceTree.app/Contents/Resources/git_local/lib/perl5/site_perl/5.18.2/darwin-thread-multi-2level/SVN
sudo ln -s /Library/Developer/CommandLineTools/Library/Perl/5.18/darwin-thread-multi-2level/auto/SVN /Applications/SourceTree.app/Contents/Resources/git_local/lib/perl5/site_perl/5.18.2/darwin-thread-multi-2level/auto/SVN
參考文獻(xiàn)
- Mac環(huán)境下svn的使用(閱讀難度:★)
-
在Mac OS X下架設(shè)和使用Xcode的SVN版本管理環(huán)境(閱讀難度:★) - iOS 版本控制_ SVN / Mac 環(huán)境下 svn 的使用 (閱讀難度:★★)
- GIT和SVN之間的五個(gè)基本區(qū)別(閱讀難度:★★★★)
-
iOS開發(fā)中SVN管理工具的使用
[圖片上傳失敗...(image-28238b-1517827465013)]