我的云服務(wù)器的系統(tǒng)是centos 7.1 該方法適合在該系統(tǒng)下執(zhí)行,其他系統(tǒng)沒有嘗試過,請(qǐng)注意。
首先安裝svn服務(wù)
1 # yum install subversion
2然后檢查下安裝的版本號(hào) 因?yàn)榘姹咎?hào)不同可能會(huì)出現(xiàn)不同的情況
# yum install subversion
版本 信息
[root@VM_137_37_centos ~]# svnserve --version
svnserve, version 1.7.14 (r1542130)
compiled Nov 20 2015, 19:25:09
Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository back-end (FS) modules are available:
* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.
Cyrus SASL authentication is available.
3創(chuàng)建適合的存儲(chǔ)svn的倉庫
mkdir -p /home/svn/svnrepos
4創(chuàng)建版本庫 svnadmin create /home/svn/svnrepos
5然后去到創(chuàng)建的倉庫地址創(chuàng)建版本庫 cd/home/svn/svnrepos
會(huì)有如下內(nèi)容:
[root@VM_137_37_centos svnrepos]# ls -1
README.txt
conf
db
format
hooks
locks
6 然后進(jìn)入到conf文件中修改內(nèi)容 cd conf/
authz文件是權(quán)限控制文件
passwd是帳號(hào)密碼文件
svnserve.conf SVN服務(wù)配置文件
7 修改密碼
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry=harryssecret
# sally=sallyssecret
quwenzhe=123456
新增一個(gè)用戶密碼
8修改權(quán)限
html] view plaincopy
[/]
quwenzhe=rw
讓其有讀寫的權(quán)限 如果有特殊權(quán)限要求情趣svn上尋找
9修改svnserve.conf文件 vi svnserve.conf
anon-access=read #匿名用戶可讀
auth-access=write #授權(quán)用戶可寫
password-db=passwd #使用哪個(gè)文件作為賬號(hào)文件
authz-db=authz #使用哪個(gè)文件作為權(quán)限文件
realm=/home/svn/svnrepos # 認(rèn)證空間名,版本庫所在目錄
注意去掉注釋后前面不能有空格 要不然在執(zhí)行的時(shí)候會(huì)報(bào)錯(cuò)
10啟動(dòng)svn
svnserve -d -r /var/svn/svnrepos(停止SVN命令 killall svnserve)
11然后就可以去windows上測(cè)試了
輸入svn的地址就好后面的內(nèi)容可以不輸入
然后點(diǎn)確定會(huì)讓其輸入賬戶和密碼 輸入剛才在passwd上設(shè)置的就好。
本人在剛搭建的時(shí)候也碰到很多問題。比如在編輯passwd文件時(shí)因?yàn)閷?duì)liunx系統(tǒng)不熟悉導(dǎo)致一直有問題,所以請(qǐng)大家在使用的時(shí)候要嚴(yán)格按照步驟來哦。寫出來也是鞏固下自己,并且傳播下去使大家能正確使用,有問題的可以隨時(shí)溝通
上一章介紹了服務(wù)端SVN的安裝,接下來介紹客戶端的安裝及使用:
客戶端SVN安裝。
1.首先我們需要下載 ”svn小烏龜”后,進(jìn)行安裝。比如我下載如下的(如果需要的可以關(guān)注我發(fā)給大家):
安裝完成后,比如在我的項(xiàng)目在qiandaun1中,我右鍵就可以看到如下:
說明snv已經(jīng)安裝成功了!
2:checkout項(xiàng)目文件。
新建或者進(jìn)入目錄下(比如qianduan1),右鍵 --> Svn Checkout -->
其中URL我可以在SVN服務(wù)器獲取到,我在myRepositories下右鍵新建文件
qianduan文件被建立,然后比如我這樣右鍵 --> copy下
即可。
將復(fù)制的版本庫URL粘貼上,如下圖:
點(diǎn)擊【ok】按鈕后,就可以檢索出來,如下:
如下圖:
注意事項(xiàng):
.svn這個(gè)隱藏目錄記錄著兩項(xiàng)關(guān)鍵信息:工作文件的基準(zhǔn)版本和一個(gè)本地副本最后更新的時(shí)間戳,千萬不要手動(dòng)修改或者刪除這個(gè).svn隱藏目錄和里面的文件!!,否則將會(huì)導(dǎo)致你本地的工作拷貝(靜態(tài)試圖)被破壞,無法再進(jìn)行操作。
1) TortoiseSVN圖標(biāo)介紹
一個(gè)新檢出的工作復(fù)本使用綠色的對(duì)勾重載,表示Subversion狀態(tài)正常。
在你開始編輯一個(gè)文件之后,狀態(tài)就變成了已修改,而圖標(biāo)重載已變成了紅色感嘆號(hào)。通過這種方式,你可以很容易地看出那些文件從你上次更新工作復(fù)本被修改過,且需要提交。
如果在提交的過程中出現(xiàn)了沖突,圖標(biāo)就會(huì)變成了黃色感嘆號(hào)。
加號(hào)告訴你有一個(gè)文件或者目錄已經(jīng)被計(jì)劃加入到版本控制中。
2) TortoiseSVN Client基礎(chǔ)操作:
1. SVN檢出(SVN Checkout)
在文件夾或者目錄下單擊右鍵 –> 選擇SVN檢出,如下圖所示
點(diǎn)擊后,在彈開窗口的版本庫url框中輸入版本庫的目錄地址,然后點(diǎn)擊確定,如下圖
再點(diǎn)擊ok按鈕后,如下圖:
在彈出的對(duì)話框中輸入用戶名和密碼,驗(yàn)證成功后,項(xiàng)目文件開始從遠(yuǎn)程服務(wù)器下載到本地工作目錄中。
點(diǎn)擊ok按鈕后,即可獲取完成,如下圖所示:
2. 增加(Add)
在test項(xiàng)目文件下,新建一個(gè)b.txt文件,提交到版本庫的方法如下2種:
1. 先提到變更列表中,再commit到配置庫中,選擇新增文件,右鍵SVN菜單執(zhí)行“Add“操作提交到”變更列表中”,然后右鍵SVN菜單執(zhí)行”SVN Commit”提交到版本庫中。
2. 不提交到變更列表中,而是直接commit配置庫中,選擇該文件,右鍵svn菜單執(zhí)行”SVN Commit”操作。
3. 刪除(Delete)
如果被刪除的文件還未入版本庫,則可以直接使用操作系統(tǒng)的刪除操作刪除該文件。
如果被刪除的文件已入版本庫,則刪除的方法如下:
使用操作系統(tǒng)的刪除操作刪除該文件,然后選擇被刪除文件的父目錄,右鍵svn菜單執(zhí)行”SVN Commit”,在變更列表中選擇被刪除的文件。如下圖:
4. 改名(Rename)
修改文件名,選中需要重命名的文件或文件夾,然后右鍵“TortoiseSVNàRename“,在彈出的對(duì)話框中輸入新名稱,點(diǎn)擊”ok”按鈕,并將修改文件名后的文件或文件夾通過 “SVN Commit”提交到SVN服務(wù)器上。
5. SVN還原(SVN Revert)
右擊想要回退的文件或者文件夾,在TortoiseSVN彈出菜單中選擇”Update to reversion…” 然后會(huì)彈出一個(gè)窗口,如下:
比如說我們要回退到第10個(gè)版本只需要在Revision中填寫相應(yīng)的版本號(hào),然后點(diǎn)擊ok即可。
6. 檢查更新(Check for modifications)
此功能可以顯示你所做的修改有哪些還沒有提交的,此功能不光能看到對(duì)文件的修改變化,所有的變化都能看到,包括增加文件或者目錄,刪除文件或者目錄,移動(dòng)文件或者目錄等,如果你點(diǎn)擊了檢查版本庫,那你還可以看到版本庫里的改動(dòng),既別人提交了哪些文件的改動(dòng),你還沒更新到本地,如下:
7. SVN更新(SVN Update)
更新本地代碼與SVN服務(wù)器上最新的版本一致,只要在需要更新的文件夾上點(diǎn)擊右鍵或者在文件下空白處點(diǎn)擊右鍵,選擇”SVN Update” (獲取指定版本中的內(nèi)容,點(diǎn)擊右鍵執(zhí)行SVN菜單中的“Update to reversion“),就可以了。
7.1 如何解決沖突文件
對(duì)于每個(gè)沖突的文件Subversion在你的目錄下放置了三個(gè)文件:如下:
為什么會(huì)產(chǎn)生沖突代碼呢?原因很簡(jiǎn)單就是因?yàn)椴煌娜耍瑫r(shí)修改了同一個(gè)文件的同一個(gè)地方,這時(shí)候,他提交了,我沒有提交,我就提交不了,這個(gè)時(shí)候我們要進(jìn)行先更新,然后在進(jìn)行提交即可,那如果產(chǎn)生沖突,會(huì)生成如上3個(gè)文件。
解決方案如下:
首先我們可以看下1.txt代碼如下:
<<<<<<< .mine
aaaasdf11222333 dderderder
=======
b>>>>>>> .r5
然后我去掉多余的代碼,1.txt變成這樣
aaaasdf11222333 dderderder
進(jìn)行提交,還是提交不了,如下所示:
為什么?因?yàn)闆_突會(huì)產(chǎn)生上面的三個(gè)文件,有上面3個(gè)文件存在肯定提交不了,這三個(gè)文件代碼及解釋如下:
aaaasdf11222333 dderderder
2. 1.txt.r4 是沖突前本地的版本文件
內(nèi)容如下:aaaasdf11222333
3. 1.txt.r5 是別人趕在你之前提交的版本
內(nèi)容如下: b
其中,<<<<<<<<.mine .....=======之間的代碼是你自己的,而======......>>>>>>>.r5是別人與你沖突的代碼部分
這樣就不難理解為什么會(huì)產(chǎn)生沖突這種奇怪的東西了,因?yàn)槟銈冃薷牡耐粔K代碼,當(dāng)然會(huì)產(chǎn)生沖突。
解決方案如下:
<<<<<<< .mine
6666666666666600000
=======
66666666666aaaaaaaaaa666
>>>>>>> .r16
前面說過 <<<<<<< .mine ……=======
……之間的代碼是我未產(chǎn)生沖突之前修改的代碼,
=======………>>>>>>> .r16 這中間……的代碼是別人與我沖突代碼的部分,從上面的代碼可以看到 aaaaaaaaa是我同事新增的 ,00000是我后增加的。
選擇文件->右鍵Editconficts:這種方法需要沖突雙方經(jīng)過協(xié)商之后將代碼更改統(tǒng)一之后再提交。不僅解決了沖突而且還保證了代碼是正確的,因?yàn)橹挥幸环降拇a被提交.
如上圖所示,紅色的部分是沖突代碼:theirs表示當(dāng)前服務(wù)器端最新的代碼,Mine表示自己修改后的代碼,Merged表示合并后的代碼。點(diǎn)擊紅色后右鍵選擇:use this text block就可以將該部分代碼作為合并后的代碼
接下來再說說由于沖突導(dǎo)致重要代碼被覆蓋的情況。沖突發(fā)生時(shí)如果采取的措施不對(duì)可能會(huì)導(dǎo)致部分代碼丟失,如果想要還原之前的代碼也很容易。
選擇文件->右鍵選擇show log在這里面你可以看見之前提交的所有版本,找到你想要恢復(fù)的版本右鍵選擇revert to this version 就可以恢復(fù)了.
SVN提交(SVN Commit)
Svn的提交是將在工作空間做的修改進(jìn)行提交,包括文件內(nèi)容的修改,文件或目錄的添加,刪除,命名,移動(dòng)等操作。如下圖所示:
8. 顯示日志(Show log)
通過此功能可以查到誰,什么時(shí)候,對(duì)那個(gè)目錄下的那些文件進(jìn)行了那些操作,如下圖:
9. 版本庫瀏覽(Repo-browser)
此功能是用來瀏覽需要查看的資料庫,在本地文件夾下點(diǎn)擊右鍵,選擇TortoiseSVNàRepo-browser,在彈出的對(duì)話框中輸入資料庫地址,再輸入用戶名和密碼,就能查看到你需要查看到版本庫的內(nèi)容,在這你還能看到那些文件被誰鎖定了,如下圖:
三: 創(chuàng)建分支合并相互操作
項(xiàng)目中為何要?jiǎng)?chuàng)建分支,及合并?
比如我現(xiàn)在項(xiàng)目所有的文件放在主干上(trunk)中,由于需求的變更,需要增加新的需求,但是我們主干上還要繼續(xù)往下開發(fā),在此我們可以新建一個(gè)分支,來做增加新的需求那一塊,主干上繼續(xù)開發(fā),等分支上代碼沒有問題的時(shí)候,再合并到主干上來。
創(chuàng)建分支的最大的目的就是跟主線進(jìn)行并行開發(fā)時(shí)候不影響主線的開發(fā)。
如何操作?
假如我本地新建一個(gè)文件夾test下有2個(gè)文件夾trunk(存放主干上的代碼)和branch(存放分支上的代碼),如下所示:
一:先提取主干上的代碼。
點(diǎn)擊trunk --> 鼠標(biāo)右鍵 --> 點(diǎn)擊SVN Checkout --> 彈出一個(gè)對(duì)話框,如下圖所示:
其中上面的URL是從服務(wù)器VisualSVN Server上獲取的,如下所示:
直接右鍵qianduan3 --> Copy URL to Clipboard 即可。
其中qianduan3項(xiàng)目有如下文件,如下圖所示:
最后點(diǎn)擊上面的checkout按鈕后,就可以在主干上把代碼從遠(yuǎn)程服務(wù)器上獲取到,如下所示:
二:新建分支
從trunk(主干上)創(chuàng)建分支(branch)步驟如下:
1. 右鍵trunk --> branch/Tag 如下圖:
在彈出的對(duì)話框如下圖:
點(diǎn)擊ok按鈕后,就可以在VisualSVN Serval服務(wù)器上新增newBranch,是從如上服務(wù)器qianduan3上的文件拷貝一份的,如下所示:
現(xiàn)在我們可以再來看看本地branch文件夾了,我現(xiàn)在直接進(jìn)入branch文件下,右鍵 --> Chenckout下,就可以把newBranch下的所有文件提取出來了,如下所示:
點(diǎn)擊ok按鈕就可以把文件提取出來了,如下圖所示:
分支目前建立在svn的服務(wù)器端,本地并沒有更新,對(duì)本地branch文件夾 右鍵--> update即可,就可以更新到分支代碼,如下所示:
四:合并分支到主干上
比如我現(xiàn)在對(duì)branch分支上新增3.txt文件,然后提交上去,如下所示:
我現(xiàn)在想把分支上的代碼3.txt合并到主干上trunk,現(xiàn)在要怎么合并呢?步驟如下:
1. 回到我們剛剛的主干(trunk)文件夾下,鼠標(biāo)右鍵該文件夾 --> TortoiseSVN --> Merge 如下圖所示:
在彈出的窗口,如下圖所示:
接著點(diǎn)擊【Next】下一步,如下圖所示:
再接著【Next】下一步,如下圖所示:
就可以看到主干trunk上多加了一個(gè)3.txt,就是從分支上合并過來的。
五:合并主干到分支。
如果主干上有一些更新,比如說jar包更新等等,那么這些要更新到分支上去,如何操作呢?比如我現(xiàn)在在主干上新建一個(gè)4.txt文件,比如如下:
我現(xiàn)在的分支上目錄如下:
現(xiàn)在是想把主干上的4.txt合并到分支上來,要如何操作?
步驟如下,還是和剛剛操作類似.
1. 我們?cè)诜种c(diǎn)擊branch --> 右鍵TortoiseSVN --> Merge 如下圖所示:
在彈出新窗口后,如下圖所示:
接著點(diǎn)擊【Next】下一步,如下圖所示:
繼續(xù)下一步,如下圖:
最后直接merge,就可以看到分支branch上也有主干上的4.txt文件了,也就是說,合并主干到分支上也是可以的,如下圖所示: