您好,登錄后才能下訂單哦!
關(guān)于版本控制器,大致可分為集中式和分布式兩種。
集中式的版本控制器通常會(huì)存在一個(gè)中央服務(wù)器,主要是用來存放版本庫的,(這里暫且先不說分支的事)當(dāng)我們工作之前,首先需要從中央服務(wù)器得到一份最新版本的代碼,修改完畢之后,再次推送到中央服務(wù)器。集中式的版本控制器有個(gè)最大的缺點(diǎn),就是必須要聯(lián)網(wǎng)才能工作,同時(shí),一旦中央服務(wù)器掛掉,整個(gè)項(xiàng)目就全部奔潰,但是用起來確實(shí)要方便一些。
分布式版本控制器的優(yōu)勢(shì)就很明顯了,對(duì)于分布式的版本控制器,并沒有中央服務(wù)器一說,加入該版本控制器的每個(gè)人的電腦上都有一個(gè)完整的版本庫,因此,也同時(shí)避免了聯(lián)網(wǎng)的缺點(diǎn)。當(dāng)進(jìn)行了本地的修改之后,只要推送給彼此,各自的修改就都可以看到。為了方便,通常的分布式版本控制器中也有一臺(tái)類似于中央處理器的機(jī)器,只是為了大家相互推送的時(shí)候更加地方便,即使一臺(tái)服務(wù)器down掉,只需要再拷貝一個(gè)版本庫即可,容災(zāi)性要好得多。
對(duì)于這兩種版本控制器,SVN是集中式的代表,Git是分布式的代表,兩者各有優(yōu)缺點(diǎn),在互聯(lián)網(wǎng)公司中,兩者都有著一定的應(yīng)用。這里要說的是SVN的搭建與操作。
環(huán)境: CentOS6.5
操作之前:安裝svnserver,直接使用yum安裝即可,一些情況下,電腦是自動(dòng)安裝了svn和git的
開始操作:
1、SVN倉庫的建立
a、創(chuàng)建項(xiàng)目目錄dir,并進(jìn)行倉庫初始化
mkdir /svn_repo
svnadmin create /svn_repo
b、修改倉庫目錄下的conf文件夾下的三個(gè)文件的內(nèi)容,每行開頭沒有空格
authz:權(quán)限相關(guān)信息
[/] # 倉庫所在目錄 muhui = rw # 給muhui用戶rw權(quán)限 *= # 其他用戶沒有任何權(quán)限 |
passwd:用戶名和密碼相關(guān)信息
user = passswd |
svnserver.conf:相關(guān)配置路徑
anon-access = none 匿名用戶權(quán)限 auth-access = write 授權(quán)用戶有寫權(quán)限 password-db = passwd 密碼文件,未指定路徑,表示當(dāng)前目錄 authz-db = authz 權(quán)限文件 realm = /svn_repo/httpd 版本庫所在目錄 |
2、SVN項(xiàng)目目錄
a、創(chuàng)建主工作目錄manager
[root@bogon svn_test]# tree
.
└── manager
└── httpd
├── branched # 子分支目錄
├── tags
└── trunk # 主分支目錄
進(jìn)入到manager目錄,3將manager的目錄結(jié)構(gòu)同步到倉庫,在httpd項(xiàng)目目錄下,有了這個(gè)三個(gè)文件夾。
svn import httpd svn://127.0.0.1/httpd -m "init httpd"
b、創(chuàng)建用戶,并將主分支的代碼檢出到本地。
mkdir -p /svn_test/dev1 cd /svn_test/dev1 svn co svn://127.0.0.1/httpd/trunk httpd |
c、文件修改,并提交文件
[root@bogon httpd]# vim main.cpp [root@bogon httpd]# ls main.cpp [root@bogon httpd]# svn st ? main.cpp # ?表示該文件未納入版本控制 [root@bogon httpd]# svn add main.cpp # add將該文件添加到版本控制 A main.cpp [root@bogon httpd]# svn ci -m "dev1 modify" # 將修改提交到服務(wù)器 增加 main.cpp 傳輸文件數(shù)據(jù). 提交后的版本為 2。 |
3、多人協(xié)作
需要說明的一點(diǎn),多人協(xié)作,和多分支操作是兩個(gè)概念。一個(gè)分支上可以有多個(gè)user在操作,這里說的是在主分支下的多用戶操作。
a、創(chuàng)建用戶dev2,下拉代碼修改并再次提交
[root@bogon httpd]# pwd /svn_test/dev2/httpd [root@bogon httpd]# vim main.cpp [root@bogon httpd]# svn st M main.cpp [root@bogon httpd]# svn up # 更新代碼,防止遠(yuǎn)程庫代碼已被更改 版本 2。 [root@bogon httpd]# svn log # 查看提交日志信息 ......... [root@bogon httpd]# svn diff # 查看修改信息 ......... [root@bogon httpd]# svn ci -m "dev2 write sub" # 提交代碼到倉庫 ......... |
b、沖突解決
沖突原因:多個(gè)用戶同時(shí)下拉一份代碼進(jìn)行修改,修改完畢在提交之前,未再次svn up更新,多個(gè)用戶同時(shí)對(duì)一個(gè)版本進(jìn)行修改,造成沖突。
[root@bogon httpd]# svn ci -m "dev1--complict" # 提交失敗,存在沖突 正在發(fā)送 main.cpp 傳輸文件數(shù)據(jù).svn: 提交失敗(細(xì)節(jié)如下): svn: 文件 “/trunk/main.cpp” 已經(jīng)過時(shí) [root@bogon httpd]# svn up 在 “main.cpp” 中發(fā)現(xiàn)沖突。 選擇: (p) 推遲,(df) 顯示全部差異,(e) 編輯, (mc) 我的版本, (tc) 他人的版本, (s) 顯示全部選項(xiàng): p # p選項(xiàng),進(jìn)行延時(shí) C main.cpp 更新到版本 4。 沖突概要: 正文沖突:1 # 出現(xiàn)很多臨時(shí)文件,為各個(gè)版本的源文件 [root@bogon httpd]# svn resolve --accept working main.cpp # 沖突雙方進(jìn)行協(xié)商,修改源文件,之后臨時(shí)文件被刪除 “main.cpp”的沖突狀態(tài)已解決 [root@bogon httpd]# svn ci -m "deal complict" # 再次提交,沖突解決 |
4、分支操作
a、分支創(chuàng)建
[root@bogon dev3]# svn copy svn://127.0.0.1/httpd/trunk svn://127.0.0.1/httpd/branched/branch2 -m "add new branch2" 提交后的版本為 6。
# svn分支創(chuàng)建的過程,實(shí)際上是對(duì)主分支的一份拷貝
b、查看共有多少個(gè)分支
[root@bogon dev3]# svn list svn://127.0.0.1/httpd/branched -v 6 muhui 5月 28 09:38 ./ 6 muhui 5月 28 09:38 branch2/
c、從分支branch2分支檢出代碼到當(dāng)前工作目錄,并查看當(dāng)前屬于那個(gè)分支
[root@bogon dev3]# svn co svn://127.0.0.1/httpd/branched/branch2 httpd A httpd/main.cpp 取出版本 6。 [root@bogon httpd]# svn info 路徑: . URL: svn://127.0.0.1/httpd/branched/branch2 版本庫根: svn://127.0.0.1/httpd 版本庫 UUID: 39c9dc13-9f79-4073-bb0e-2b58c9b71fbb 版本: 6 節(jié)點(diǎn)種類: 目錄 調(diào)度: 正常 最后修改的作者: muhui 最后修改的版本: 6 最后修改的時(shí)間: 2017-05-28 09:38:49 +0800 (日, 2017-05-28)
d、分支合并操作,要在主分支目錄下進(jìn)行合并
分支上的用戶修改文件內(nèi)容,并檢入到分支
[root@bogon httpd]# svn ci -m "branch2 modify" 正在發(fā)送 main.cpp 傳輸文件數(shù)據(jù). 提交后的版本為 7。
獲取查看分支時(shí)的版本號(hào)
[root@bogon httpd]# svn log --verbose --stop-on-copy ------------------------------------------------------------------------ r6 | muhui | 2017-05-28 09:38:49 +0800 (日, 2017-05-28) | 1 行 改變的路徑: A /branched/branch2 (從 /trunk:5) add new branch2 ------------------------------------------------------------------------
獲取主干目錄的最新版本號(hào)
[root@bogon httpd]# svn up 版本 7。
分支合并
[root@bogon httpd]# svn merge -r 6:7 svn://127.0.0.1/httpd/branched/branch2
5、版本回退
1、僅僅修改源文件,但還未進(jìn)行ci操作
[root@bogon httpd]# svn revert main.cpp
2、修改完畢的結(jié)果已經(jīng)進(jìn)行了commit
[root@bogon httpd]# svn up # 獲取版本庫最新版本 [root@bogon httpd]# svn log # 找到要回滾的版本號(hào) [root@bogon httpd]# svn merge -r 9:8 main.cpp # merge進(jìn)行回退,9表示當(dāng)前版本號(hào),8表示要回退到的版本號(hào)
------muhuizz整理
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。