很久以前用的SVN管理代碼!!!許久沒使用了,老知識回顧!!!
按照自己慣例,一篇文章!!!??????????
版本控制(Version Control)的作用:追蹤文件的變化。
文件備份;
文件名中存儲版本號或者日期;
多人編輯的環境下,共享一個文件目錄,要求每個人編輯完以后,在文件上做出所需的標識。
版本控制系統:
簡稱:VCS,也叫做“文件數據庫”,追蹤 文件的變化,避免出現混亂。
版本庫:
版本庫又名倉庫,英文名:repository。
可以理解成一個目錄,這個目錄里面的所有文件都可以被版本控制系統管理,各文件的“修改”、“刪除”都能跟蹤,以便何時都可以追蹤歷史,在將來任一時刻都可“還原”。
Git與SVN區別:
Git:每個人電腦里都有完整的版本庫
分布式:Git
SVN:版本庫是集中存放在中央服務器。
集中式:SVN
集中式版本控制系統最大的毛病就是必須聯網才能工作。
SVN
在Windows環境下,一般使用“TortoiseSVN”;
在Mac環境下,由于Mac自帶了SVN的服務器端和客戶端功能,所以不安裝任何第三方軟件就可以使用 SVN功能,需要做一些簡單的配置。
搭建SVN服務器
先在任一目錄(/User/gyh/)下新建一個SVNs目錄,以后就可以在SVNs目錄(/Users/gyh/SVNs)下創建(放置)多個倉庫目錄。
打開終端,創建一個repoOfmy倉庫,輸入指令:svnadmin create /Users/gyh/SVNs/repoOfmy
指令執行成功后,硬盤上多一個“/Users/gyh/SVNs/repoOfmy”目錄,其目錄結構如下:
配置svn用戶權限:(conf文件夾)
在“/Users/gyh/SVNs/repoOfmy/conf/”目錄下,有3個權限文件: authz、passwd、snvserve.conf
GYHdeMacBook-Pro:conf gyh$ ls
authz hooks-env.tmpl passwd svnserve.conf
-
打開authz:用戶權限分配內容 (
vi authz
)
# 用戶組
(添加用戶組的成員)
[groups]
# admins是組名,admin是組員(可以寫多個,用“,”分隔。如:admins=admin,gyh,coco)
admins=admin
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# 設置目錄權限
(成員的權限設置)
# [/foo/bar]
# harry = rw
# &joe = r
# * =
[/]
@admins=rw
# 意思是:admins組里面的成員都有rw的權限,rw:讀寫權限, 也可以寫成admin=rw,只賦予admin用戶有讀寫權限
# 這里如果不寫,代表:下一級目錄的用戶不具備繼承關系,也就是沒有訪問的權限。
* = r:別的用戶只能讀; * = rw:其他的用戶也有繼承關系(具備讀/寫權限)
-
打開passwd:配置svn用戶的密碼 (
vi passwd
)
[users]
# 與authz的用戶名對應,后面是用戶密碼
admin=abc123
# harry = harryssecret
# sally = sallyssecret
-
打開svnserve.conf:svn的配置信息 (
vi svnserve.conf
)
配置項如下: (#
和空格都去掉)
# anon-access = read
#匿名用戶有讀的權限
# auth-access = write
#登錄用戶的寫的權限
# 關聯passwd(需要放開注釋)
# password-db = passwd
# 關聯authz (需要放開注釋)
# authz-db = authz
最終:
# 禁用匿名用戶讀的權限
anon-access = none
# 登錄用戶有寫的權限
auth-access = write
# 關聯passwd.
password-db = passwd
# 關聯authz
authz-db = authz
啟動 svn服務器: [ ]( 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”的子目錄,否則導入代碼會長時間沒反應)
重復 啟動服務器,會報錯:
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服務器環境。
使用svn客戶端功能
1.從本地導入(import)代碼到服務器 (第一次:初始化導入)
格式:
svn import 工程的路徑 服務器地址 --username=用戶名 --password=密碼 -m "注釋內容"
例子:
svn import /Users/gyh/Documents/project svn://localhost/ios/project --username=gyh --password=abc123 -m "初始化導入"
svn import /Users/gyh/Documents/project https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化導入"
(https:對應的服務器地址)將“/Users/gyh/Documents/project”中的所有內容,上傳到服務器ios倉庫的project目錄下(后面雙引號中的"初始化導入"是注釋)。
格式:
svn checkout 服務器地址 --username=用戶名 --password=密碼 存儲在本地的路徑
例子:
svn checkout https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化導入" /Users/gyh/Desktop/project
(https:對應的服務器地址)將服務器中project倉庫的內容下載到本地的“/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) 已經更改過的代碼到服務器 (非文件路徑的修改)
- <1>.先定位到“/Users/gyh/Desktop/project”目錄
cd /Users/gyh/Desktop/project”
- <2>.輸入提交指令
格式:svn commit -m "修改的內容"
例子:
cd /Users/gyh/Desktop/project”
svn commit -m "修改了plist文件"
將“/Users/gyh/Desktop/project”下的所有修改都同步到服務器端。
4.更新:服務器端的代碼到客戶端 (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/
其中,括號中的內容 一般代表著指令的簡稱。
比如:用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 "修改的內容"
標準步驟:
a. repository(源代碼庫):源代碼統一存放的地方
b. Checkout (提取):當你手上沒有源代碼的時候,你需要從repository里checkout一份
svn checkout svn地址
c. Commit(提交):當你已經修改了代碼,你就需要Commit到repository
svn commit -m "修改的內容"
d. Update(更新):當你已經Checkout了一份源代碼, Update一下,就可以和Repository上的源代碼進行同步,手上的代碼就會有最新變更。
開發過程:
已Checkout好的代碼 → Update(獲得最新的代碼) → 作出自己的修改并調試成功 → Commit(提交后,大家就可以看到你的修改)
多人開發:(跟git類似)
如果兩個程序員同時修改了同一個文件,SVN可以默認Merge這兩個程序員的改動。(Merge:合并)
實際上SVN管理源代碼是以“行”為單位的:
兩個程序員只要修改的不是程序的同一行,SVN都會自動合并兩種修改;
如果是同一行呢,SVN會提示:文件Confict(沖突)。需要手動確認、解決。
參考:
SVN子命令add用法淺析