PS:1.文中所有的截圖都是以老版的cornerStone為參考,新版樣式有出入?咦!
PS:2.本文所有$符號(hào)之后為在終端中執(zhí)行的命令。
PS:3.基本都是總結(jié)他人的資料最岗,自己整合修改的。感謝原作者(不知道是誰(shuí))般渡!
版本控制系統(tǒng)
版本控制
版本控制(Version Control)的作用是追蹤文件的變化驯用。為什么需要版本控制蝴乔?簡(jiǎn)單說(shuō)薇正,就是當(dāng)你出錯(cuò)了挖腰,可以很容易地回到?jīng)]出錯(cuò)時(shí)的狀態(tài)。
你可能已經(jīng)在不知不覺(jué)中猴仑,布置了自己的版本控制系統(tǒng)辽俗。比如崖飘,創(chuàng)建了類似下面這樣的文件名:
論文_0510.doc
論文0514.doc
論文0521.doc
論文修改版.doc
論文最終不修改版.doc
這就是軟件中為什么有"Save As"命令的原因坐漏。它使得你可以在不破壞源文件的基礎(chǔ)上薄疚,得到一個(gè)類似的新文件。文件的多版本保存是一個(gè)常見(jiàn)問(wèn)題赊琳,通常的解決辦法是這樣的:
- 做一個(gè)文件備份(比如Document.old.txt)街夭。
- 在文件名中加入版本號(hào)或日期(比如Document_V1.txt,DocumentMarch2007.txt)躏筏。
- 在多人編輯的環(huán)境下板丽,共享一個(gè)文件目錄,并且要求每個(gè)人編輯完以后,在文件上做出標(biāo)識(shí)埃碱。
什么是版本控制系統(tǒng)(VCS)猖辫?
大型的、頻繁修改的砚殿、多人編寫(xiě)的軟件項(xiàng)目啃憎,需要一個(gè)版本控制系統(tǒng)(簡(jiǎn)稱VCS,行話叫做"文件數(shù)據(jù)庫(kù)"),追蹤文件的變化辉阶,避免出現(xiàn)混亂。
一次典型的使用過(guò)程是這樣的:
愛(ài)麗絲add一個(gè)文件(list.txt)進(jìn)入repo店印。然后,她又把這個(gè)文件check out炫贤,做了一次編輯(在文件中加入milk這個(gè)單詞)兰珍。接著,她將修改后的文件check in唠摹,并附有一條checking message("加入了新的條目")。第二天早上成肘,鮑勃update了他本地的working set,看到了list.txt的最新修訂版蟹演,其中包含了單詞"milk"骡技。如果他使用changelog或diff,都可以發(fā)現(xiàn)前一天愛(ài)麗絲加入"milk"這個(gè)詞是趴。
網(wǎng)上有許多VCS軟件可供選擇掸驱,并且都有詳細(xì)的教程或手冊(cè)温赔,比如SVN陶贼、CVS、RCS、Git足画、Perforce等等。
版本庫(kù)
版本庫(kù)又名倉(cāng)庫(kù),英文名repository央星,你可以簡(jiǎn)單理解成一個(gè)目錄廉沮,這個(gè)目錄里面的所有文件都可以被版本控制系統(tǒng)管理起來(lái)叁幢,每個(gè)文件的修改刽漂、刪除样悟,都能跟蹤蔼水,以便任何時(shí)刻都可以追蹤歷史吊说,或者在將來(lái)某個(gè)時(shí)刻可以“還原”厅贪。
SVN
在Mac環(huán)境下眉抬,由于Mac自帶了SVN的服務(wù)器端和客戶端功能悄谐,所以我們可以在不裝任何第三方軟件的前提下使用SVN功能威沫,不過(guò)還需做一下簡(jiǎn)單的配置孵构。
為什么使用SVN
進(jìn)行權(quán)限管理雾袱,針對(duì)不同的人毒坛,開(kāi)放不同的權(quán)限豪直。比如Alex是進(jìn)行A項(xiàng)目的珠移,Bob進(jìn)行B項(xiàng)目的,那么SVN可以有效的管理每個(gè)人看到的項(xiàng)目暇韧,Alex不可能獲得Bob的項(xiàng)目酪刀,同樣Bob也不可能獲得Alex的項(xiàng)目骂倘。
對(duì)于代碼進(jìn)行追蹤历涝,代碼不會(huì)遺失场刑。不如今天代碼修改亂了,需要恢復(fù)到某一天的邀桑,那么我們只需要選擇一下恢復(fù)的日期即可進(jìn)行恢復(fù)壁畸。
搭建SVN服務(wù)器
1. 創(chuàng)建代碼倉(cāng)庫(kù)照弥,存儲(chǔ)客戶端上傳的代碼
先在~/Desktop
目錄(這個(gè)目錄可以是任意非中文路徑)新建一個(gè)svn目錄,以后可以在svn目錄下創(chuàng)建多個(gè)倉(cāng)庫(kù)目錄。
打開(kāi)終端空免,切換到該目錄cd ~/Desktop/svn
氮昧,創(chuàng)建一個(gè)learnsvn
倉(cāng)庫(kù)框杜,輸入命令:svnadmin create ./learnsvn
,執(zhí)行成功后袖肥,會(huì)發(fā)現(xiàn)在該目錄下多了一個(gè)LimitFree目錄咪辱。
2. 配置SVN的用戶權(quán)限
主要是修改./learnsvn/conf
目錄下的三個(gè)文件
打開(kāi)svnserve.conf,將下列配置項(xiàng)前面的#和空格都去掉
#anon-access = read
#auth-access = write
#password-db = passwd
#authz-db = authz
anon-access = read
代表匿名訪問(wèn)的時(shí)候是只讀的椎组,若改為anon-access = none
代表禁止匿名訪問(wèn)油狂,需要帳號(hào)密碼才能訪問(wèn)
打開(kāi)passwd,在[users]下面添加帳號(hào)和密碼
[users]
# harry = harryssecret
# sally = sallyssecret
wj = 123
student = 123456
帳號(hào)是wj寸癌,密碼是123
打開(kāi)authz专筷,配置用戶組和權(quán)限
我們可以將在passwd里添加的用戶分配到不同的用戶組里,以后的話蒸苇,就可以對(duì)不同用戶組設(shè)置不同的權(quán)限磷蛹,沒(méi)有必要對(duì)每個(gè)用戶進(jìn)行單獨(dú)設(shè)置權(quán)限。
在[groups]下面添加組名和用戶名溪烤,多個(gè)用戶之間用逗號(hào)(,)隔開(kāi)
[groups]
topgroup=wj,student
說(shuō)明wj和student都是屬于topgroup這個(gè)組的味咳,接下來(lái)再進(jìn)行權(quán)限配置庇勃。
使用[/]代表svn服務(wù)器中的所有資源庫(kù)
[/]
@topgroup = rw
上面的配置說(shuō)明topgroup這個(gè)組中的所有用戶對(duì)所有資源庫(kù)都有讀寫(xiě)(rw)權(quán)限,組名前面要用@
如果是用戶名槽驶,不用加@责嚷,比如wj這個(gè)用戶有讀寫(xiě)權(quán)限
[/]
wj = rw
3. 啟動(dòng)SVN服務(wù)器
在終端輸入命令:svnserve -d -r ~/Desktop/svn
或svnserve -d -r ~/Desktop/svn/learnsvn
沒(méi)有任何提示就說(shuō)明啟動(dòng)成功了
4. 關(guān)閉SVN服務(wù)器
打開(kāi)活動(dòng)監(jiān)視器,輸入svnserve
掂铐,強(qiáng)制退出進(jìn)程罕拂。
使用SVN客戶端功能
SVN客戶端有兩種使用方式,命令行和GUI界面軟件(CornerStone)
命令行工具
usage: svn <subcommand> [options] [args]
Subversion command-line client.
Type 'svn help <subcommand>' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
or 'svn --version --quiet' to see just the version number.
?
Most subcommands take file and/or directory arguments, recursing
on the directories. If no arguments are supplied to such a
command, it recurses on the current directory (inclusive) by default.
?
Available subcommands:
add
auth
blame (praise, annotate, ann)
cat
changelist (cl)
checkout (co)
cleanup
commit (ci)
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls)
lock
log
merge
mergeinfo
mkdir
move (mv, rename, ren)
patch
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
relocate
resolve
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up)
upgrade
?
Subversion is a tool for version control.
For additional information, see http://subversion.apache.org/
CornerStone
添加代碼倉(cāng)庫(kù)
填寫(xiě)SVN倉(cāng)庫(kù)信息
基本操作
checkout(檢出)
add(添加文件)
delete(刪除文件)
modify (修改文件)
commit(提交)
update(更新)
resolve conflict(解決沖突)
revert(恢復(fù)初始狀態(tài))