細說SVN集中式版本控制器
svn全稱Subversion,實現多人開發同一個項目時,對源代碼進行管理的工具。在公司裏邊,一個項目是由多人同時在開發,大家在本地自己電腦開發php代碼,完畢後就commit上傳給服務器運行。
如圖:多人開發同一個php程序文件(重疊部分代碼),在做commit提交給服務器的時候,要造成文件彼此覆蓋的問題。
svn作用之一:解決文件覆蓋,協作多人開發同一個項目的同一個文件問題。
一、什麽是SVN
那麽什麽是SVN呢,下面就由我為大家細說,SVN是代碼版本管理軟件,管理著隨時間改變的數據。這些數據放置在一個中央資料檔案庫 (repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變動。這樣你就可以把檔案恢復到舊的版本, 或是瀏覽文件的變動歷史。 許多人會把版本控制系統想像成某種 “時光機器”。
成形於2001年8月31日
2010年1月成為apache軟件基金會的頂級項目
使用svn的作用
① 協作多人開發同一個項目同一個文件,並且不會出現文件覆蓋問題。
② 針對一個文件可以創建許多不同版本,並且可以隨時查看不同版本的內容。
③ 公司領導可以通過svn查看每個人的工作情況
二、SVN的安裝
1、服務器端安裝
SVN服務器端軟件下載地址:
https://sliksvn.com/download/
①創建文件目錄,用於安裝svn服務器端:D:\svn\server
2、客戶端安裝
tortoiseSVN客戶端軟件下載:
https://tortoisesvn.net/downloads.html
註意:該客戶端安裝完成後,重啟電腦
該軟件直接像其他軟件一樣,直接安裝即可,沒有註意事項
①創建多個svn倉庫(存儲代碼)
svn是用於管理代碼文件的,創建倉庫用於存儲php代碼文件,因為公司在同期要開發維護多個項目的代碼文件,因此要給svn創建多個不同倉庫:比如
d:/svn/app/shop
d:/svn/app/book
d:/svn/app/car
svnadmin create d:/svn/app/shop[book/car] //創建實實在在的創庫
②執行指令,使得shop目錄變為真實的SVN倉庫效果
3. 啟動倉庫服務
svn要設置服務才可以使用,該服務走svn協議,端口為3690
啟動服務指令:
> svnserve -d[獨立端口運行] -r[具體倉庫目錄] 倉庫地址目錄
通過“超級管理員”權限打開dos命令行,掛起狀態,不關閉
d:\svn\server\bin\svnserve.exe -d -r d:/svn/app
(註意:倉庫地址目錄為所有倉庫的上級目錄app,這樣可以任意選取被操作的倉庫)
4. 與倉庫取得聯系
開發者要把代碼文件提交到svn倉庫裏邊進行保管,提交之前先讓開發者與svn倉庫取得聯系
①創建tom用戶的工作目錄:www\tom
工作目錄:開發各種php代碼文件的地方
tom工作目錄與svn倉庫取得聯系:
執行鼠標右鍵--->checkout指令
此時在tom的工作目錄裏邊生成一個.svn的隱藏文件,說明聯系成功
三.使用svn服務
①在commit文件時出現commit failed(details follow)認證失敗
原因是:該shop倉庫沒有設置賬號權限
解決:打開倉庫匿名賬號權限,然後再進行commit
D:\svn\app\shop\conf\svnserve.conf
anon-access = write //開啟匿名賬號權限設置
1. 文件顏色標誌
① 藍色加號:本地的.svn對該文件有形成管理(遠程倉庫 還沒有該文件記錄)
② 綠色對號:正常文件,本地文件、.svn管理的版本文件、倉庫文件 三者內部內容一致
③ 紅色嘆號:表示 本地文件 與 .svn管理的文件內容不一致(用戶自己修改了該文件)
④ 黃色嘆號:表示該文件正處於沖突狀態
⑤ 藍色問號:新建的一個文件,本地.svn 和 遠程倉庫 對該文件都沒有記錄
2. svn的常見操作
① checkout: 檢出動作,執行同時會把倉庫全部文件更新到本地
② update: 把倉庫最新的程序文件更新到本地
③ commit: 把本地文件提交給svn倉庫
3. 目錄和文件的提交
一個新目錄創建好了,該目錄內部還有新的程序文件
那麽,只有該新目錄提交完畢了,內部的新程序文件才允許提交
規律:一個文件只有上級目錄已經被commit操作後,該文件本身才可以被commit操作
四.沖突Conflicted(重點)
1. 什麽是沖突
沖突(conflicted)
多人在同一時間對同一個程序文件進行編輯後提交的時候,後提交的文件要覆蓋先提交文件的現象稱為“沖突”
tom在9:00對register.php文件進行開發
10:00對開發好的文件進行提交
jim在9:20對register.php文件進行開發
9:40對開發的文件進行提交
那麽,在10:00以後服務器只給體現tom開發的功能,後上傳的文件會把先上傳的同名文件給覆蓋了
沖突解決方案:
① 令牌方式解決
vss軟件就采取這樣的思路,給每個程序文件都分配一個令牌,只有拿到令牌的開發者才可以對這個文件進行修改,修改完畢再還令牌。
令牌的原理:同一個文件同一個時間點只能有一個人開發
② 版本解決:
svn的解決方案
只有本地的版本 與 服務器版本號碼一致,才允許提交
本地版本 小於 服務器版本 則禁止提交
沖突具體形式與解決
①大家修改的代碼不在同一處
沖突解決:執行update指令,使得服務器新版本與本地舊版本做融合操作,之後再繼續commit提交即可
開啟(超級管理員權限打開dos窗口)服務:
regsiter.php.mine: tom本地文件在update之前的效果
regsiter.php.r14: 是文件14版本的效果
regsiter.php.r15: 是文件15版本的效果
以上3個文件理解後直接刪除,否則影響本文件commit提交
五.賬號和權限
①關閉匿名賬號:anon-access = none
去掉前面的#:password-db = passwd
authz-db = authz
②設置賬號
例如:tom = tom123
③給賬號設置權限
#給shop倉庫設置操作權限:[shop:/]
#給用戶設置具體操作權限 r(read)讀權限 w(write)寫權限
例:tom = rw
#除了tom外,其他用戶都沒有操作權限
* =
r: 讀權限,代表可以從svn倉庫update更新文件
w:寫權限,代表本地可以給svn倉庫commit提交文件
svn與apache不同,配置文件修改了無需重啟服務,svn每次運行的時候都會重新加載配置文件
此時,再進行svn操作的時候,提示我們輸入用戶名和密碼
④給一個組別設置權限
有的時候一個項目組裏邊有多個開發人員(例如20個),這些人的操作權限都一致
為了分配權限比較方便、快捷,就給這些開發人員設置到一個組別裏邊,直接給組別設置操作svn的權限,組別的權限就等於開發人員的權限
有一個操作權限都一致的團隊賬號:
php = php1,php2,php3 //把團隊成員設置到組裏邊
@php = rw //直接給組別設置操作權限
六.設置開機啟動項服務
超級管理員權限打開dos命令行: 創建服務器
sc create svnd binPath="D:\svn\server\bin\svnserve.exe -r d:/svn/app --service" start= auto
sc delete svnd:刪除服務器
七.svn使用細節
1. 查看工作情況
領導可以通過svn查看大家的工作情況
操作:右鍵-->svn-->show log
2. 清除緩存
登錄使用svn的時候,如果系統記住用戶名、密碼了,就不能更換其他賬號
可以通過: 右鍵-->svn-->settings-->saved data 清除各種(賬號)緩存
3. 關閉匿名賬號
使用#號方式關閉匿名賬號會影響 show log 文件維護日誌的查看
4. 零bug開發
svn可以保證大家開發的代碼都必須遵守嚴格的標準,如果哪個人把代碼寫錯了,通過svn可以追查出來,包括一個.點或空格的微小錯誤
查看文件當前內容 與 之前版本內容的差異:TortoiseSVN->Diff with previous version
八.hooks鉤子
通過svn開發的項目代碼文件,最終需要上傳給web服務器才可以運行,其中hooks鉤子技術可以幫組我們把文件從svn倉庫自動同步給web服務器
本地工作目錄:E:/www/tom
svn倉庫:D:/svn/app/shop
web服務器:D:/web/shop
九. svn擴展功能
1. 什麽是BAE
百度應用引擎(Baidu App Engine,簡稱BAE)是國內商業運營時間最久、用戶群體最為龐大的平臺之一,提供彈性、便捷、一站式的應用部署服務,支持PHP/Java/Node.js/Python等各種應用。您只需上傳應用代碼,BAE自動為您完成運行環境配置、應用部署、均衡負載、資源監控、日誌收集等各項工作,大大簡化部署運維工作
除了BAE,還有aliyun(阿裏應用引擎)、SAE(sina app engine新浪引用引擎)
在許多應用程序裏邊,svn已經作為一個不可缺少的組件構成應用的一部分,其中BAE(Baidu App Engine)裏邊就可以通過svn實現代碼的上傳和更新。
2. svn應用到bae裏邊
① 到bae裏邊創建應用
bae網址:https://cloud.baidu.com
先登錄到bae應用裏邊
通過svn對bae代碼進行維護
獲取到的svn主機名地址:
https://svn.duapp.com/appidfr7dk8qylo
用戶名:baidu賬號
密碼:baidu賬號密碼
創建本地svn工作目錄
之後工作目錄與svn倉庫取得聯系
在bae操作界面,如果有新文件被commit提交,其會有提示,之後我們還有點擊“快捷發布”,以便文件可以同步到web服務器供訪問:
細說SVN集中式版本控制器