一、svn(后悔葯)
1、介紹
SVN全名Subversion,即版本控制系統。它將數據放置在一個中央倉庫(repository)中。這個倉庫很像一個普通的文件服務器,不過它會記住每一次文件的變動。這樣你就可以把數據恢復到舊的版本,或是瀏覽文件的變動歷史。Subversion是一個通用的系統,可用來管理任何類型的文件,其中包括了程序源碼。
svn=代碼版本控制系統+備份服務器
類似軟件:csv、vss、svn、git(github)
csv:最早期的版本控制系統,是svn的前身,現已被svn替代
vss:微軟的產品,主要對.net代碼進行版本控制
svn:現在企業使用最多的版本控制系統
git:開始主要是用於管理linux內核的,由李納斯發明
外國的代碼托管網站-github: https://github.com
中國代碼托管網站-碼雲: https://git.oschina.net/
二、svn軟件的安裝
服務端下載地址: https://www.visualsvn.com/visualsvn/download/
客戶端下載地址: https://tortoisesvn.net/downloads.html
1、安裝服務端
測試有沒有安裝成功,直接win+R,輸入svn即可,如果有以下提示說明安裝成功:
解決辦法:找到環境變量path選項,鼠標點進去移出來點擊確定即可,不需要做任何的更改。在重新打開命令行進行輸入svn進行測試
2、安裝客戶端
安裝客戶端的時候,注意自己電腦的系統位數是32還是64,安裝客戶端之后在安裝系統對應位數的漢化包(可選)
檢出有沒有安裝成功,鼠標右鍵多出以下兩個選項即可:
有需要的同學可以安裝對應位數的漢化包:
設置中文:
三.svn的使用
1、svn的三大指令
l checkout(檢出) :用於與svn服務器建立連接,輸入用戶名和密碼,獲取代碼到本地目錄(第一次連接使用)
l commit:提交本地代碼到svn服務器
l update:把svn服務器上面的代碼更新下來
2、svn使用圖解
提示:以后去公司很少部署svn服務端,我們只需要在自己的電腦中安裝客戶端即可,接着技術主管或者經理給我們分配一個賬號和svn服務器的地址告訴我們,然后開始開發。
四、部署單倉庫(技術總監)
注意:在我們的svn中項目不叫項目文件夾,我們把項目稱之為”倉庫”
1、部署單倉庫的步驟
第一步:在任意的盤符位置,建立一個項目文件夾(D:/app/blog)
第二步:把上面的項目文件夾變為倉庫
svnadmin create D:\app\blog
第三步:監管上面的倉庫
svnserve -d -r D:\app\blog
-d :后台監管
-r:監管的目錄(倉庫的目錄)
2、連接svn服務器
第一步:任意的建立一個檢出目錄,右鍵檢出checkout或者版本庫瀏覽器
區別:checkout 會把倉庫中的所有代碼都檢出到指定的目錄
版本庫瀏覽器:可以瀏覽倉庫中的所有的文件,有選擇性檢出指定的某個文件
輸入svn服務器的地址:svn://127.0.0.1
第二步:檢出代碼
如果版本號為0,可以說明這是一個新倉庫。檢出之后會在當前的檢出目錄多一個隱藏文件夾.svn,就說明已經與svn服務器建立關聯了。
3、上傳代碼到svn服務器
第一步:任意的在檢出目錄添加一些文件,進行鼠標右鍵提交
第二步:填寫提交時的備注信息
提交后出現無權限:
注意:只要是新建立的倉庫,第一次提交都是沒有權限,我們可以寫改這個倉庫的配置文件進行權限控制。
4、單倉庫的權限(用戶名和密碼)
細分兩種:
1、匿名用戶提交(不需要用戶名和密碼也可以提交,但是不安全,一般個人使用)
2、允許授權用戶提交(需要用戶名和密碼,安全一點)
4-1、匿名用戶提交
第一步:打開倉庫的conf目錄,如下:
匿名用戶只需要修改svnserve配置文件即可:
不需要重新監管,保存會立刻生效。
再次進行提交成功:
每次成功提交都會產生一個新的版本號。
4-2、授權用戶的權限配置
第一步:修改倉庫cong目錄下面的svnserve文件:
第二步:修改passwd文件,給當前倉庫添加一些用戶和用戶對應的密碼
格式:用戶名 = 密碼
注意: 用戶名 = 密碼;
提示:在linux中如果有類似此文件,需要給其設置嚴格的讀取權限。
第三步:修改authz文件,配置用戶的權限
因為cainiao用戶對core目錄只有r權限,沒有w權限,也就是說只能更新,但是不能提交,會把以下的錯誤:
5、svn常見圖標
(1)圖標異常(沒有出現)的解決辦法:
win7解決辦法:
底部啟動任務管理器,找到進程選項,找到進程名explorer.exe結束掉,然后再找到文件選項新建剛才結束的進程explorer.exe,如下圖所示:
win8,win10解決辦法:
需要修改注冊表中的某些選項,參考下面的圖片:
(2)常見圖標說明:
常規圖標:
出現此圖標,說明此文件中的內容與svn服務器文件中的內容一樣。
修改圖標:
當我們對本地的某個文件進行修改,導致與svn服務器上面的對應的文件的內容不一致就會出現此圖標。
無版本控制圖標
說明此文件沒有與svn服務器建立關聯
忽略圖標
當我們有些文件不想提交到svn服務器或者沒有必要提交,我們可以把這些文件設置為忽略即可,那么提交的時候這些文件就不會出現在提交的文件變更列表中。
忽略一般有兩種:
忽略一個具體的文件:1.jpg
忽略某一類的文件:*.jpg
沖突的圖標
尤其是團隊開發的時候,多個開發人員對同一個文件的相同行代碼都進行了修改,那么后者提交的會覆蓋前者提交的,但是svn不會覆蓋,會提示我們解決沖突。
五、【重點】svn代碼沖突的解決
說明:
尤其是團隊開發的時候,多個開發人員對同一個文件的相同行代碼都進行了修改,那么后者提交的會覆蓋前者提交的,但是svn不會覆蓋,會提示此文件沖突,需要我們手動去解決沖突。
這里以兩個用戶分別是dashen和cainiao用戶為例.
dashen用戶先對1.php文件進行修改然后提交:
dashen用戶修改第5行和第6代碼之后,進行提交,也就是現在svn服務器中的1.php的文件內容應該dashen提交的。
cainiao用戶提交之前,對1.php文件的第5和第6行代碼也進行了修改,修改如下:
提交會發現有沖突:
解決辦法:點擊上面的升級。或者是更新都可以,出現如下文件:
文件說明:
文件名.mine :當前用戶准備要提交的文件
文件名.r8(8代表版本號):兩者未提交之前,服務器上面最新的文件
文件名.r9(9代表版本號):代表前一個用戶提交的服務器上面最新的文件
黃色感嘆號的文件:把兩者有沖突的代碼部分整合在一起。
解決辦法:把除開黃色感嘆號的以外的三個文件給刪除掉,在整合黃色的文件,再次進行提交即可。
整合沖突代碼的時候,程序員(工程師)之前應該彼此商量一下,使用誰的代碼。不要輕易覆蓋人家的代碼。
六、svn中的版本回退(后悔葯)[重點]
使用到版本回退的場景:
①不小心刪除了一個文件,並且提交了,這時候可以通過提交的日志來找回。
②找回之前所寫過代碼,這時候也可以通過提交的日志來找回。
具體步驟:
右鍵更新至版本:
點擊日志來找回:
第二步:找到之前提交代碼的日志信息,進行找回
七、update更新注意要點
l 當本地文件沒有變動,服務器文件改動的時候,更新會從服務器取文件覆蓋當前文件。
l 當本地文件有改動,服務器文件沒有改動的話,svn端的不會覆蓋本地的。
l 當本地文件有改動,服務器文件有改動的話,如果改動的部分不沖突,就會合並文件到本地,如果有沖突的話,需要自己手動解決沖突,然后再提交。
八、svn的存儲機制(了解即可)
svn存儲機制是采用差異存儲法
svn每次提交的時候,都會和之前的版本做個對比,把不同的地方,單獨使用一個小區塊來存儲,節省磁盤空間。
九、svn中部署多倉庫
第一步:任意的目錄(D:/app)建立多個項目文件夾
第二步:把上面三個項目文件夾變為倉庫
因為上面的blog已經是倉庫了,只需要把ios和android項目文件夾變為倉庫即可:
第三步:監管三個倉庫的父目錄(D:/app)
獲取多倉庫中各個倉庫中的項目代碼:
svn://ip/倉庫名
如獲取blog項目代碼: svn://127.0.0.1/blog
如獲取android項目代碼: svn://127.0.0.1/android
如獲取ios項目代碼: svn://127.0.0.1/ios
特別注意:svn://127.0.0.1 這種地址形式是針對於單倉庫
十、多倉庫的權限設置
這里有三個倉庫,以其中一個blog倉庫為例,做權限控制:
第一步:打開blog倉庫的conf目錄,修改svnserve文件:
第二步:加用戶名和密碼,修改passwd文件
第三步:修改authz文件,配置權限
十一、SVN其他功能
1、清除用戶用戶名和密碼
2、export指令(相當於拷貝項目,沒有隱藏文件.svn,不受版本控制)
導出后如下所示:不再有.svn的隱藏文件夾,說明沒有與svn服務器建立關聯。
3、更改svn服務器地址
十二、svn注冊成window系統服務
1、創建服務指令如下:
快捷鍵win+r:以管理員的方式執行以下命令:
sc create SVNService binpath= "D:\svn\server\bin\svnserve.exe --service -r D:\app" start= auto
特別注意:
binpath=后面有個空格 start=后面有個空格(只能有一個空格)
其中SVNService 是服務的名稱,此服務名可以自己自定義
特別注意:如果以系統服務服務的方式去監管倉庫,就不可以使用之前黑窗口的方式去監管。(一山不容二虎)
2、服務的控制指令
關閉、開啟、重啟服務:
net stop|start|restart 服務名 (如開啟svn服務:net start SVNService)
刪除服務:
sc delete 服務名 (如刪除svn服務:sc delete SVNService)
3、cmd命令的批處理
把一些原本在黑窗口執行的命令,我們可以把這些命令寫在文件名后綴bat的文件中。
注意:以上bat文件需要以管理員的方式去執行。
十三、svn中的鈎子
1、介紹
所謂鈎子就是與一些版本庫事件觸發的程序,例如新修訂版本的創建,或是未版本化屬性的修改。每個鈎子都會被告知足夠多的信息,包括那是什么事件,所操作的對象,和觸發事件的用戶名。通過鈎子的輸出或返回狀態,鈎子程序能讓工作繼續、停止或是以某種方式掛起。
說的簡單點,我們可以利用鈎子在提交前或者是提交后做一些操作。如:
l 利用提交前的鈎子讓用戶在提交代碼前強制用戶必須填寫備注信息。
l 利用提交后的鈎子把svn倉庫代碼實時同步到網站web目錄(重點掌握)
2、鈎子的種類
l 利用提交前的鈎子讓用戶在提交代碼前強制用戶必須填寫備注信息。
l 利用提交后的鈎子把svn倉庫代碼實時同步到網站web目錄(重點掌握)
3、鈎子實戰[重點]
l 利用提交后的鈎子把svn倉庫代碼實時同步到網站web目錄
明確幾點:
web站點:D:\server\apache\htdocs\blog
檢出目錄:C:\Users\oj\Desktop\blog
第一步:想讓代碼實時同步到web站點,必須讓web站點與svn服務器的對應的倉庫建立關聯,只需要有一個.svn隱藏文件夾即可。
第二步:去倉庫的hook鈎子目錄,把post-commit.tmpl復制一份到當前目錄並改名為post-commit.bat。之前的內容全部去掉
在post-commit.bat的文件內容如下:
@echo off
SET REPOS=%1
SET REV=%2
SET DIR=%REPOS%/hooks
SET PATH=%PATH%
SET WEB_DIR=D:\server\apache\htdocs\blog
svn update %WEB_DIR% --username dashen --password dashen111
l 利用提交前的鈎子讓用戶在提交代碼前強制用戶必須填寫備注信息。
第二步:去倉庫的hook鈎子目錄,把pre-commit.tmpl復制一份到當前目錄並改名為pre-commit.bat。
pre-commit.bat的文件內容如下:
十四、局域網訪問別人電腦
前提:對方的電腦安裝了svn服務器,並且創建了倉庫;對方電腦關閉了防火牆;知道對方倉庫的賬號與密碼
1.電腦任意位置創建一個文件夾
2.鼠標右擊--->版本庫瀏覽器
3.輸入url
4.彈出輸入密碼框
5.輸入成功更新數據到shop文件夾
十五、Svn復習重點
代碼沖突+版本回退+倉庫代碼同步web(鈎子)