一、SVN
1、什么是svn
svn:全稱Subversion,是代碼版本管理軟件,管理著隨時(shí)間改變的數(shù)據(jù)。這些數(shù)據(jù)放置在一個(gè)中央資料檔案庫 (repository) 中。 這個(gè)檔案庫很像一個(gè)普通的文件服務(wù)器, 不過它會記住每一次文件的變動。這樣你就可以把檔案恢復(fù)到舊的版本, 或是瀏覽文件的變動歷史。 許多人會把版本控制系統(tǒng)想像成某種 “時(shí)光機(jī)器”。
SVN它也是安裝在服務(wù)器端的一個(gè)軟件,用來管理我們每次提交的代碼。沒提交一次代碼,svn就會記住:該次提交的代碼是什么、提交人是誰、這個(gè)代碼的提交較上次的代碼有什么變化。
2、同類型產(chǎn)品
vss:visual source safe
cvs:Concurrent Versions system
github: 分布式代碼控制管理軟件,林納斯開發(fā)的(Linux)
3、使用svn開發(fā)的作用
①、可以記錄一個(gè)文件的多個(gè)版本,并且能回到之前的某個(gè)版本
②、可以對相同的文件進(jìn)行“融合/整合”,而不是覆蓋文件。
③ 公司領(lǐng)導(dǎo)可以通過svn查看每個(gè)人的工作情況
二、SVN的安裝
1、服務(wù)器端安裝(Subversion for windows)
2、客戶端安裝(TortoiseSVN)
根據(jù)自己電腦的位數(shù)(32位或者64位)來選擇安裝。
查看自己電腦位數(shù)的方法:右鍵我的電腦?屬性
雙擊一個(gè)版本,一路next,最后點(diǎn)擊finish完成安裝。
安裝完成:在任何文件夾的空白處包括桌面,右鍵會看到如下選項(xiàng),表示安裝成功。
安裝完成,如果看不到右鍵選項(xiàng),重啟電腦。
三、使用SVN服務(wù)
1、創(chuàng)建多個(gè)倉庫(存儲代碼文件)
1、先在E:/svn/app/下新建三個(gè)倉庫(放項(xiàng)目代碼的)
創(chuàng)建倉庫:
用命令:svnadmin create 倉庫地址
svnadmin create E:/svn/app/shop
如果提示
錯(cuò)誤。解決辦法:類似于mysql和httpd。
方法一:添加svnadmin.exe所在目錄到系統(tǒng)的環(huán)境變量。
右鍵我的電腦?屬性?高級?環(huán)境變量?Path.
編輯Path,添加svnadmin.exe所在目錄到Path中。
方法二:切換到svnadmin.exe所在目錄,再執(zhí)行該命令即可。
切換方法:
到此,倉庫創(chuàng)建成功。
把其他兩個(gè)倉庫也創(chuàng)建好:(針對個(gè)別電腦不能自動將命令目錄放到環(huán)境變量中的情況)
到此,三個(gè)倉庫都創(chuàng)建好了。
2、啟動倉庫服務(wù)
用命令:svnserve –d –r 倉庫地址
svnserve –d –r E:/svn/app/shop
服務(wù)啟動完成,這個(gè)dos窗口不能關(guān)閉,關(guān)閉表示svn倉庫服務(wù)關(guān)閉。這是一個(gè)掛起服務(wù)。
3、與倉庫取得聯(lián)系
1、新建了三個(gè)文件夾,分別表示三個(gè)程序員的電腦
2、這三個(gè)程序員,要和svn倉庫聯(lián)系
在每個(gè)程序員的“電腦”上的工作目錄中,右鍵?SVN Checkout…
彈出如下對話框:
點(diǎn)擊“ok”。
然后看一下yasuo的文件夾(電腦):
查看隱藏文件的方法:
相同的辦法,另外兩個(gè)程序員,也和我們的倉庫取得聯(lián)系。
4、給svn倉庫提交第一個(gè)程序文件
第一步:右鍵文件->SVN->add
第二步:右鍵->SVN Commit…
點(diǎn)擊“ok”
出現(xiàn)“認(rèn)證失敗”是因?yàn)椋覀儧]有權(quán)限提交。
那么現(xiàn)階段,先為了提交成功,先打開“匿名賬號”。
打開“匿名賬號”的方法:
找到該項(xiàng)目的倉庫配置文件:
打開svnserve.conf文件,進(jìn)行如下配置:
注意:19行前面不要有空格。
修改完配置文件,無需重啟倉庫服務(wù)。
再次提交:
4.1文件顏色標(biāo)志
① 藍(lán)色加號:本地的.svn對該文件有形成管理(遠(yuǎn)程倉庫 還沒有該文件記錄),該文件已經(jīng)執(zhí)行add操作
② 綠色對號:本地文件、.svn管理的版本文件、遠(yuǎn)程倉庫文件 三者內(nèi)容完全一致
③ 紅色嘆號:本地文件 與 .svn和倉庫文件 不一致(用戶自己修改了該已經(jīng)提交過的文件)
④ 黃色嘆號:表示該文件正處于沖突狀態(tài)
⑤ 藍(lán)色問號:新建的一個(gè)文件,本地.svn 和 遠(yuǎn)程倉庫 對該文件都沒有記錄
4.2在倉庫內(nèi)部查看已經(jīng)提交的文件信息(看一下,了解一下)
查看的結(jié)果:
這里就是了解一下,能看到我們提交的東西就可以了。
4.3 ruiwen和jie要到倉庫服務(wù)器中將已有的文件取得
update操作過后:
jie也是同樣的步驟。
到此,三個(gè)程序員都有這個(gè)文件了。從現(xiàn)在開始,他們就可以一起開發(fā)了。
5、svn常見操作
checkout ->第一次和倉庫取得聯(lián)
update->后續(xù)更新
commit->提交
6、目錄和文件的提交
6.1一次性提交多個(gè)文件
一次性提交多個(gè)文件,無需add,只需直接SVN Commit…。svn會將沒有執(zhí)行過add操作的文件找出來。
6.2提交文件夾
在yasuo的工作目錄中,新建了Controller的文件夾,在Controller文件夾下新建了兩個(gè)控制器User和Index控制。
在Controller文件夾下,右鍵,顯示如下情況:
發(fā)現(xiàn)沒有add和commit,也就無法提交,原因是他們的父級目錄還沒有提交。
先提交他們的父級目錄,也就是Controller文件夾。當(dāng)然了,提交Controller文件夾的時(shí)候,自動會關(guān)聯(lián)上他里面的文件。
選擇上這些文件,提交即可。
7、同時(shí)運(yùn)行多個(gè)svn倉庫服務(wù)
錯(cuò)誤的同時(shí)運(yùn)行多個(gè)svn倉庫服務(wù)的方式:
在打開一個(gè)dos窗口,在執(zhí)行svnserve命令,開啟book和car的服務(wù)。
svnserve –d –r e:/svn/app/book
svnserve –d –r e:/svn/app/car
svnserve –d –r e:/svn/app/shop
如果這樣開啟三個(gè)服務(wù)是不行的,這樣的話,我們在檢出(checkout)的時(shí)候,localhost指向不明確了。
正確的辦法:
開啟一個(gè)總的服務(wù):
svnserve –d –r E:/svn/app
到這里,三個(gè)倉庫的服務(wù)都開啟了。
實(shí)驗(yàn):與book倉庫取得聯(lián)系(檢出checkout)。
新模擬了兩個(gè)程序員的電腦(Xishi和Diaochan),在Diaochan的工作目錄下,右鍵?Checkout…
注意:此時(shí),localhost指向的是E:/svn/app目錄,所以,我們在想檢出book項(xiàng)目的代碼的時(shí)候,要加一層book目錄。
7.1已有用戶更換svn主機(jī)名地址
當(dāng)svn服務(wù)主機(jī)地址改變后,我們就要相應(yīng)的改變主機(jī)地址。改變的辦法:
看到上圖,表示主機(jī)更換成功。
8、同一個(gè)文件的不同版本切換
在yasuo的工作目錄中,新建了一個(gè)banben.txt的文件,第一次寫了11111并提交;第二次加入2222再次提交;第三次加入33333再次提交。到此,banben.txt這個(gè)文件有三個(gè)版本。
如何來查看它有幾個(gè)版本呢?
看到的結(jié)果:
如何切換到之前的某個(gè)版本?
回到之前的版本,我們一般是查看為主,當(dāng)然有時(shí)候也會修改。
如果回到以前的版本,并且修改了文件,并且還要提交,會出現(xiàn)“過期”錯(cuò)誤。
原因是,svn倉庫服務(wù),如果本地的文件版本 低于 倉庫服務(wù)器的版本,則不允許直接提交。
四、解決沖突(重點(diǎn))
在多人開發(fā)同一個(gè)文件的時(shí)候,很多時(shí)候會出現(xiàn),兩個(gè)程序員的代碼在同一處(行)或者不同處(行)不同的情況。這個(gè)時(shí)候在提交代碼的時(shí)候就會提示有沖突。但是沖突的根本原因是客戶端的版本低于服務(wù)端的版本。
1、沖突的具體形式
1.1大家修改的代碼不在同一處(行)
此種情況,一般來說沒什么毛病,比較好處理,svn一般會幫我們將文件融合到一起。
起始版本是11號(yasuo、jie、svn服務(wù)器的該文件版本都是11號):
jie先將他的工作目錄下的該文件修改了。將一句話刪除了:
修改之后要提交
jie提交后,jie的本地文件版本和svn服務(wù)器端版本都變?yōu)榱?2號版本。
yasuo開始修改它的工作目錄下的代碼:
修改完畢,提交
yasuo此時(shí)遇到文件過時(shí)的問題。原因是他的本地文件版本是11號,而jie已經(jīng)將服務(wù)器端的版本變更為12號了。此時(shí)需要更新他的本地文件也為12號才能提交。
然后再次提交:提交成功。
jie在update一下自己的代碼即可。
1.2大家修改的代碼在同一處(行)
起始文件:
yasuo先在333333這行修改,然后提交。
jie在3333的位置也進(jìn)行修改,然后得先更新,在提交,上面已經(jīng)說過原因了。
jie在更新后,出現(xiàn)了下面三個(gè)文件:
這幾個(gè)文件是輔助文件,幫助我們來解決沖突的。這三個(gè)文件都可以用記事本打開查看。
對比這三個(gè)文件,得出一個(gè)最終的版本:
然后進(jìn)行提交即可。
小貼士:在實(shí)際開發(fā)中,有些時(shí)候,代碼的沖突比較大,這個(gè)時(shí)候最好是和其他程序員進(jìn)行溝通,共同解決沖突。
五、賬號和權(quán)限
1、先關(guān)閉“匿名”賬號
2、使得設(shè)置賬號和配置權(quán)限的文件生效
3、設(shè)置賬號
在生效的passwd文件中,設(shè)置用戶名和密碼。
4、給賬號設(shè)置權(quán)限
4.1給具體用戶設(shè)置權(quán)限
① 開啟唯一倉庫服務(wù) svnserve.exe -d -r d:/svn/app/shop
[/]
用戶名 = 具體操作權(quán)限
② 開啟多個(gè)倉庫服務(wù) svnserve.exe -d -r d:/svn/app
[shop:/] //或者 [book:/] [car:/]
用戶名 = 具體操作權(quán)限
權(quán)限有兩種:讀(能update,能從倉庫update代碼)和寫(能提交代碼commit)。讀用r表示,寫用w表示。
現(xiàn)在,給jie和yasuo權(quán)限:
亞索再次提交:
這里不要記住用戶名和密碼的原因是:因?yàn)閖ie和yasuo本來是兩個(gè)人,也就意味著是兩臺電腦。而我們是在一臺電腦上模擬操作的,yasuo記住用戶名和密碼,那么jie在提交的時(shí)候其實(shí)用的也是yasuo的用戶名和密碼。
如果不小心記住了用戶名和密碼怎么辦?
3.2給一個(gè)組別設(shè)置權(quán)限
有些時(shí)候,我們公司在開發(fā)一個(gè)項(xiàng)目的時(shí)候,往往會請一些公司以外的人(外包)來做一些專業(yè)性的東西。比如,我們要做一個(gè)視頻網(wǎng)站。播放器找另一家的公司的人來做,這個(gè)時(shí)候,就需要給其他公司的人設(shè)置權(quán)限。
辦法:
先給這些人設(shè)置賬號密碼
給這些人分成一個(gè)組,并給權(quán)限
給組設(shè)置權(quán)限的時(shí)候,組名前要加“@”符合。
3.3開啟只操作某個(gè)目錄權(quán)限
還是上面的例子,最好的解決辦法是把外部人員的可操作目錄單獨(dú)設(shè)置,比如開發(fā)播放器的三個(gè)人,我們讓他們只有操作shipin目錄的權(quán)限。
六、設(shè)置開機(jī)啟動svn倉庫服務(wù)
添加svn倉庫服務(wù)語法:
sc create 服務(wù)名 binPath= "可執(zhí)行文件路徑 –r 倉庫地址 --service" start= auto
sc create svnd binPath= "e:/svn/server/bin/svnserve.exe -r e:/svn/app --service" start= auto
注意語法中的空格
在電腦的服務(wù)中查看
刪除服務(wù)的命令:
sc delete 服務(wù)名
sc delete svnd
也可以對創(chuàng)建和刪除svn服務(wù)的命令生成一個(gè)批處理文件。
生成的辦法就是將命令保存到一個(gè)記事本中,然后講記事本的后綴改為bat即可。
七、svn使用細(xì)節(jié)
①、提交、更新代碼。
②、領(lǐng)導(dǎo)查看每個(gè)員工的工作情況。
領(lǐng)導(dǎo)可以通過show log來查看每個(gè)員工的工作情況
八、真實(shí)環(huán)境使用svn說明
解決沖突補(bǔ)充:
jie開發(fā)login.php和register.php
yasuo開發(fā)login.php和index.php