很久以前用的SVN管理代碼!!!許久沒使用了,老知識回顧?。。?br>
按照自己慣例,一篇文章?。?!??????????
版本控制(Version Control)的作用:追蹤文件的變化。
文件備份;
文件名中存儲版本號或者日期;
多人編輯的環(huán)境下,共享一個文件目錄,要求每個人編輯完以后,在文件上做出所需的標(biāo)識。
版本控制系統(tǒng):
簡稱:VCS,也叫做“文件數(shù)據(jù)庫”,追蹤 文件的變化,避免出現(xiàn)混亂。
版本庫:
版本庫又名倉庫,英文名:repository。
可以理解成一個目錄,這個目錄里面的所有文件都可以被版本控制系統(tǒng)管理,各文件的“修改”、“刪除”都能跟蹤,以便何時都可以追蹤歷史,在將來任一時刻都可“還原”。
Git與SVN區(qū)別:
Git:每個人電腦里都有完整的版本庫
分布式:Git
SVN:版本庫是集中存放在中央服務(wù)器。
集中式:SVN
集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作。
SVN
在Windows環(huán)境下,一般使用“TortoiseSVN”;
在Mac環(huán)境下,由于Mac自帶了SVN的服務(wù)器端和客戶端功能,所以不安裝任何第三方軟件就可以使用 SVN功能,需要做一些簡單的配置。
搭建SVN服務(wù)器
先在任一目錄(/User/gyh/)下新建一個SVNs目錄,以后就可以在SVNs目錄(/Users/gyh/SVNs)下創(chuàng)建(放置)多個倉庫目錄。
打開終端,創(chuàng)建一個repoOfmy倉庫,輸入指令:svnadmin create /Users/gyh/SVNs/repoOfmy
指令執(zhí)行成功后,硬盤上多一個“/Users/gyh/SVNs/repoOfmy”目錄,其目錄結(jié)構(gòu)如下:


配置svn用戶權(quán)限:(conf文件夾)
在“/Users/gyh/SVNs/repoOfmy/conf/”目錄下,有3個權(quán)限文件: authz、passwd、snvserve.conf
GYHdeMacBook-Pro:conf gyh$ ls
authz hooks-env.tmpl passwd svnserve.conf
-
打開authz:用戶權(quán)限分配內(nèi)容 (
vi authz)
# 用戶組(添加用戶組的成員)
[groups]
# admins是組名,admin是組員(可以寫多個,用“,”分隔。如:admins=admin,gyh,coco)
admins=admin
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe# 設(shè)置目錄權(quán)限(成員的權(quán)限設(shè)置)
# [/foo/bar]
# harry = rw
# &joe = r
# * =
[/]
@admins=rw# 意思是:admins組里面的成員都有rw的權(quán)限,rw:讀寫權(quán)限, 也可以寫成admin=rw,只賦予admin用戶有讀寫權(quán)限
# 這里如果不寫,代表:下一級目錄的用戶不具備繼承關(guān)系,也就是沒有訪問的權(quán)限。
* = r:別的用戶只能讀; * = rw:其他的用戶也有繼承關(guān)系(具備讀/寫權(quán)限) -
打開passwd:配置svn用戶的密碼 (
vi passwd)
[users]
# 與authz的用戶名對應(yīng),后面是用戶密碼
admin=abc123# harry = harryssecret
# sally = sallyssecret -
打開svnserve.conf:svn的配置信息 (
vi svnserve.conf)
配置項如下: (#和空格都去掉)
# anon-access = read#匿名用戶有讀的權(quán)限
# auth-access = write#登錄用戶的寫的權(quán)限# 關(guān)聯(lián)passwd(需要放開注釋)
# password-db = passwd
# 關(guān)聯(lián)authz (需要放開注釋)
# authz-db = authz
最終:
# 禁用匿名用戶讀的權(quán)限
anon-access = none
# 登錄用戶有寫的權(quán)限
auth-access = write# 關(guān)聯(lián)passwd.
password-db = passwd
# 關(guān)聯(lián)authz
authz-db = authz
啟動 svn服務(wù)器: [ ]( svnserve -d -r /Users/gyh/SVNs )
GYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNs 或 GYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNs/repoOfmy
(不能再加“/mycode”的子目錄,否則導(dǎo)入代碼會長時間沒反應(yīng))
重復(fù) 啟動服務(wù)器,會報錯:
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
svnserve: E000048: Can't bind server socket: Address already in use

這樣就搭建了svn服務(wù)器環(huán)境。
使用svn客戶端功能
1.從本地導(dǎo)入(import)代碼到服務(wù)器 (第一次:初始化導(dǎo)入)
格式:
svn import 工程的路徑 服務(wù)器地址 --username=用戶名 --password=密碼 -m "注釋內(nèi)容"
例子:
svn import /Users/gyh/Documents/project svn://localhost/ios/project --username=gyh --password=abc123 -m "初始化導(dǎo)入"
svn import /Users/gyh/Documents/project https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化導(dǎo)入"(https:對應(yīng)的服務(wù)器地址)將“/Users/gyh/Documents/project”中的所有內(nèi)容,上傳到服務(wù)器ios倉庫的project目錄下(后面雙引號中的"初始化導(dǎo)入"是注釋)。
2.從服務(wù)器端 下載代碼到客戶端本地 (checkout)
格式:
svn checkout 服務(wù)器地址 --username=用戶名 --password=密碼 存儲在本地的路徑
例子:
svn checkout https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化導(dǎo)入" /Users/gyh/Desktop/project(https:對應(yīng)的服務(wù)器地址)將服務(wù)器中project倉庫的內(nèi)容下載到本地的“/Users/gyh/Desktop/project”目錄中。
svn import /Users/gyh/Desktop/Company/svnDocuments https://123.45.67.890/svn/res/項目文檔 --username=gyh --password=abc123 -m "import first"
500 svn checkout https://123.45.67.890/svn/res/項目文檔 --username=gyh --password=abc123 /Users/gyh/Desktop/Company/svnDocuments
3.提交 (commit) 已經(jīng)更改過的代碼到服務(wù)器 (非文件路徑的修改)
- <1>.先定位到“/Users/gyh/Desktop/project”目錄
cd /Users/gyh/Desktop/project” - <2>.輸入提交指令
格式:svn commit -m "修改的內(nèi)容"
例子:
cd /Users/gyh/Desktop/project”
svn commit -m "修改了plist文件"
將“/Users/gyh/Desktop/project”下的所有修改都同步到服務(wù)器端。
4.更新:服務(wù)器端的代碼到客戶端 (svn update)
cd /Users/gyh/Desktop/project”
svn update
GYHdeMacBook-Pro:ios gyh$ svn help
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/
其中,括號中的內(nèi)容 一般代表著指令的簡稱。
比如:用svn ci代替svn commit,用svn co代替svn checkout。
SVN的步驟:
svn add *// 添加所有路徑
最簡步驟:
<1>.先定位到“/Users/gyh/Desktop/project”目錄
cd /Users/gyh/Desktop/project”
<2>.輸入提交指令
格式:svn commit -m "修改的內(nèi)容"
標(biāo)準(zhǔn)步驟:
a. repository(源代碼庫):源代碼統(tǒng)一存放的地方
b. Checkout (提取):當(dāng)你手上沒有源代碼的時候,你需要從repository里checkout一份
svn checkout svn地址
c. Commit(提交):當(dāng)你已經(jīng)修改了代碼,你就需要Commit到repository
svn commit -m "修改的內(nèi)容"
d. Update(更新):當(dāng)你已經(jīng)Checkout了一份源代碼, Update一下,就可以和Repository上的源代碼進(jìn)行同步,手上的代碼就會有最新變更。
開發(fā)過程:
已Checkout好的代碼 → Update(獲得最新的代碼) → 作出自己的修改并調(diào)試成功 → Commit(提交后,大家就可以看到你的修改)
多人開發(fā):(跟git類似)
如果兩個程序員同時修改了同一個文件,SVN可以默認(rèn)Merge這兩個程序員的改動。(Merge:合并)
實際上SVN管理源代碼是以“行”為單位的:
兩個程序員只要修改的不是程序的同一行,SVN都會自動合并兩種修改;
如果是同一行呢,SVN會提示:文件Confict(沖突)。需要手動確認(rèn)、解決。
參考:
SVN子命令add用法淺析
MAC下SVN的常用命令
subversion的使用總結(jié)

