版本控制之svn


一、svn(后悔葯)

1、介紹

SVN全名Subversion,即版本控制系統。它將數據放置在一個中央倉庫(repository)中。這個倉庫很像一個普通的文件服務器,不過它會記住每一次文件的變動。這樣你就可以把數據恢復到舊的版本,或是瀏覽文件的變動歷史Subversion是一個通用的系統,可用來管理任何類型的文件,其中包括了程序源碼。

 

 

svn=代碼版本控制系統+備份服務器

 

類似軟件:csvvsssvngit(github)

csv:最早期的版本控制系統,svn的前身,現已被svn替代

vss:微軟的產品,主要對.net代碼進行版本控制

svn:現在企業使用最多的版本控制系統

git:開始主要是用於管理linux內核的,由李納斯發明

外國的代碼托管網站-github: https://github.com 

中國代碼托管網站-碼雲: https://git.oschina.net/   

碼市:https://coding.net/ 

 

 

二、svn軟件的安裝

服務端下載地址:  https://www.visualsvn.com/visualsvn/download/  

客戶端下載地址: https://tortoisesvn.net/downloads.html   

1、安裝服務端

 

 

 

 

 

 

測試有沒有安裝成功,直接win+R,輸入svn即可,如果有以下提示說明安裝成功:

 

 

 

 

解決辦法:找到環境變量path選項,鼠標點進去移出來點擊確定即可,不需要做任何的更改。在重新打開命令行進行輸入svn進行測試

 

 

 

 

 

 

 

 

 

 

 

2、安裝客戶端

安裝客戶端的時候,注意自己電腦的系統位數是32還是64,安裝客戶端之后在安裝系統對應位數的漢化包(可選)

 

 

 

 

 

檢出有沒有安裝成功,鼠標右鍵多出以下兩個選項即可:

 

 

 

有需要的同學可以安裝對應位數的漢化包:

 

 

 

設置中文:

 

 

 

 

 

三.svn的使用

1svn的三大指令

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權限,也就是說只能更新,但是不能提交,會把以下的錯誤:

 

 

 

5svn常見圖標

1圖標異常(沒有出現)的解決辦法:

win7解決辦法:

底部啟動任務管理器,找到進程選項,找到進程名explorer.exe結束掉,然后再找到文件選項新建剛才結束的進程explorer.exe,如下圖所示:

 

win8win10解決辦法:

需要修改注冊表中的某些選項,參考下面的圖片:

 

 

 

 

 

 

 

 

2)常見圖標說明:

常規圖標:

 

 

出現此圖標,說明此文件中的內容與svn服務器文件中的內容一樣。

 

修改圖標:

 

 

當我們對本地的某個文件進行修改,導致svn服務器上面的對應的文件的內容不一致就會出現此圖標。

 

無版本控制圖標

 

 

說明此文件沒有與svn服務器建立關聯

 

忽略圖標

 

 

當我們有些文件不想提交到svn服務器或者沒有必要提交,我們可以把這些文件設置為忽略即可,那么提交的時候這些文件就不會出現在提交的文件變更列表中。

忽略一般有兩種:

忽略一個具體的文件:1.jpg

忽略某一類的文件:*.jpg

 

沖突的圖標

 

 

尤其是團隊開發的時候,多個開發人員對同一個文件的相同行代碼都進行了修改,那么后者提交的會覆蓋前者提交的,但是svn不會覆蓋,會提示我們解決沖突。

 

 

 

五、【重點svn代碼沖突的解決

說明:

尤其是團隊開發的時候,多個開發人員對同一個文件的相同行代碼都進行了修改,那么后者提交的會覆蓋前者提交的,但是svn不會覆蓋,會提示此文件沖突,需要我們手動去解決沖突。

 

這里以兩個用戶分別是dashencainiao用戶為例.

 

 

 

dashen用戶先對1.php文件進行修改然后提交:

 

 

dashen用戶修改第5行和第6代碼之后,進行提交,也就是現在svn服務器中的1.php的文件內容應該dashen提交的。

 

cainiao用戶提交之前,對1.php文件的第5和第6行代碼也進行了修改,修改如下:

 

 

提交會發現有沖突:

 

 

 

 

解決辦法:點擊上面的升級。或者是更新都可以,出現如下文件:

 

 

 

文件說明:

文件名.mine :當前用戶准備要提交的文件

文件名.r88代表版本號):兩者未提交之前,服務器上面最新的文件

文件名.r99代表版本號):代表前一個用戶提交的服務器上面最新的文件

黃色感嘆號的文件:把兩者有沖突的代碼部分整合在一起。

 

解決辦法:把除開黃色感嘆號的以外的三個文件給刪除掉,在整合黃色的文件,再次進行提交即可。

 

整合沖突代碼的時候,程序員(工程師)之前應該彼此商量一下,使用誰的代碼。不要輕易覆蓋人家的代碼。

 

 

 

 

六、svn中的版本回退(后悔葯)[重點]

使用到版本回退的場景:

①不小心刪除了一個文件,並且提交了,這時候可以通過提交的日志來找回。

②找回之前所寫過代碼,這時候也可以通過提交的日志來找回。

具體步驟:

右鍵更新至版本:

 

 

點擊日志來找回:

 

 

第二步:找到之前提交代碼的日志信息,進行找回

 

 

 

 

 

七、update更新注意要點

l 當本地文件沒有變動,服務器文件改動的時候,更新會從服務器取文件覆蓋當前文件。

當本地文件有改動,服務器文件沒有改動的話,svn端的不會覆蓋本地的。

l 當本地文件有改動,服務器文件有改動的話,如果改動的部分不沖突,就會合並文件到本地,如果有沖突的話,需要自己手動解決沖突,然后再提交。

 

 

八、svn的存儲機制(了解即可)

svn存儲機制是采差異存儲法

 

 

svn每次提交的時候,都會和之前的版本做個對比,把不同的地方,單獨使用一個小區塊來存儲,節省磁盤空間。

 

 

 

 

 

 

 

 

 

 

 

 

九、svn中部署多倉庫

第一步:任意的目錄(D:/app)建立多個項目文件夾

 

 

 

第二步:把上面三個項目文件夾變為倉庫

 

因為上面的blog已經是倉庫了,只需要把iosandroid項目文件夾變為倉庫即可:

 

 

 

 

第三步:監管三個倉庫的父目錄(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)

 

 

 

3cmd命令的批處理

把一些原本在黑窗口執行的命令,我們可以把這些命令寫在文件名后綴bat的文件中。

 

 

注意:以上bat文件需要以管理員的方式去執行。

 

 

 

十三、svn中的鈎子

1、介紹

所謂鈎子就是與一些版本庫事件觸發的程序,例如新修訂版本的創建,或是未版本化屬性的修改。每個鈎子都會被告知足夠多的信息,包括那是什么事件,所操作的對象,和觸發事件的用戶名。通過鈎子的輸出或返回狀態,鈎子程序能讓工作繼續、停止或是以某種方式掛起。

 

 

說的簡單點,我們可以利用鈎子在提交前或者是提交后做一些操作。如:

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(鈎子)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM