SVN的基本使用
1、SVN的基本介紹
Subversion(SVN) 是一個開源的版本控制系統(tǒng),它管理著隨時間改變的數(shù)據(jù)。 這些數(shù)據(jù)放置在一個中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件服務(wù)器, 不過它會記住每一次文件的變動。 這樣你就可以把檔案恢復到舊的版本, 或是瀏覽文件的變動歷史。
SVN 的一些概念:
- repository(源代碼庫):源代碼統(tǒng)一存放的地方
- Checkout(提?。?當你手上沒有源代碼的時候,你需要從repository checkout一份
- Commit(提交):當你已經(jīng)修改了代碼,你就需要Commit到repository
- Update (更新):當你已經(jīng)Checkout了一份源代碼, Update一下你就可以和Repository上的源代碼同步,你手上的代碼就會有最新的變更
日常開發(fā)過程其實就是這樣的(假設(shè)你已經(jīng)Checkout并且已經(jīng)工作了幾天):Update(獲得最新的代碼) -->作出自己的修改并調(diào)試成功 --> Commit(大家就可以看到你的修改了) 。
如果兩個程序員同時修改了同一個文件呢, SVN 可以合并這兩個程序員的改動,實際上SVN管理源代碼是以行為單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合并兩種修改。如果是同一行,SVN 會提示文件 Conflict, 沖突,需要手動確認。
1.1、SVN和TortoiseSVN的安裝
svn的安裝參考:https://www.runoob.com/svn/svn-install.html
TortoiseSVN的安裝參考:https://www.runoob.com/svn/tortoisesvn-intro.html。分享TortoiseSVN的網(wǎng)盤下載地址鏈接:https://pan.baidu.com/s/1fEUz_Gfjr4cuK5FyvRvhEw 提取碼:jq0d
TortoiseSVN是SVN的版本控制系統(tǒng)的一個客戶端,便于更加簡單地使用SVN,TortoiseSVN安裝完后,在電腦點擊右鍵可以看到SVN checkout等一些SVN的操作信息,如下圖:

可以直接通過 TortoiseSVN -- Repo-browser(即版本庫瀏覽器),然后輸入 SVN 的 url 地址來訪問到 SVN,而不必將 SVN 檢出到本地當中。
2、創(chuàng)建版本庫(源代碼庫)
版本庫即源代碼庫相當于一個集中的空間,用于存放開發(fā)者所有的工作成果。版本庫不僅能存放文件,還包括了每次修改的歷史,即每個文件的變動歷史。
Create 操作是用來創(chuàng)建一個新的版本庫。大多數(shù)情況下這個操作只會執(zhí)行一次。當你創(chuàng)建一個新的版本庫的時候,你的版本控制系統(tǒng)會讓你提供一些信息來標識版本庫,例如創(chuàng)建的位置和版本庫的名字。
3、檢出(checkout)
Checkout 操作用來將源代碼庫的文件都復制到本地當中,在本地可以進行內(nèi)容的修改,然后提交到源代碼庫中。
咱們可以通過SVN的右鍵菜單【Checkout】操作來從SVN服務(wù)器上將項目內(nèi)容獲取到本地系統(tǒng)文件夾中:

4、更新(update)
顧名思義,update 操作是用來更新版本庫的。這個操作將工作副本與版本庫進行同步。由于版本庫是由整個團隊共用的,當其他人提交了他們的改動之后,你的工作副本的版本就會落后于源代碼庫的版本。
我們建議在每次進行文件操作之前,先獲取服務(wù)器上的新文件。使用方式就是在本地文件夾中,點擊鼠標右鍵,選擇【SVN Update】菜單,svn就會自動從服務(wù)器上獲取新文件,并自動合并到本地文件

5、執(zhí)行變更
當檢出之后,你就可以做很多操作來執(zhí)行變更。編輯是最常用的操作。你可以編輯已存在的文件,例如進行文件的添加/刪除操作。
你可以添加文件/目錄。但是這些添加的文件目錄不會立刻成為版本庫的一部分,而是被添加進待變更列表中,直到執(zhí)行了 commit 操作后才會成為版本庫的一部分。
同樣地你可以刪除文件/目錄。刪除操作立刻將文件從工作副本中刪除掉,但該文件的實際刪除只是被添加到了待變更列表中,直到執(zhí)行了 commit 操作后才會真正刪除。
Rename 操作可以更改文件/目錄的名字。"移動"操作用來將文件/目錄從一處移動到版本庫中的另一處。
5.1、新建了文件(add)
如果您在本地添加了一個文件,在SVN Commit的界面可能會看到UNversion,意思就是,暫時沒有加入到版本控制的文件。那么,您可以先右鍵選中這個文件,右鍵選擇【SVN Add】

6、查看變更
當你檢出工作副本或者更新工作副本后,你的工作副本就跟版本庫完全同步了。但是當你對工作副本進行一些修改之后,你的工作副本會比版本庫要新。在 commit 操作之前復查下你的修改是一個很好的習慣。
Status 操作列出了工作副本中所進行的變動。正如我們之前提到的,你對工作副本的任何改動都會成為待變更列表的一部分。Status 操作就是用來查看這個待變更列表。
Status 操作只是提供了一個變動列表,但并不提供變動的詳細信息。你可以用 diff 操作來查看這些變動的詳細信息。
7、解決沖突
合并的時候可能會發(fā)生沖突。Merge 操作會自動處理可以安全合并的東西。其它的會被當做沖突。例如,"hello.c" 文件在一個分支上被修改,在另一個分支上被刪除了。這種情況就需要人為處理。Resolve 操作就是用來幫助用戶找出沖突并告訴版本庫如何處理這些沖突。
7.1、如何解決沖突
多個人同時修改了同個文件中的同一行代碼或者遇到無法進行對比的二進制文件,比如圖片等時,SVN就很容易出現(xiàn)沖突的情況。

如上圖,test_conflict.py文件發(fā)生了沖突,并且多出了幾個文件,其中.mine是我本地修改了還沒提交的版本,.r2文件是上一個版本的文件,.r1是上上個版本的文件。
我們先選中沖突文件,右鍵可以看到以下選項:

有幾個選項我們來看下:
Edit confilicts:修改沖突,可以對沖突的行進行內(nèi)容選擇,后面我們詳細說。
Mark as resolved:直接標記為已解決,這樣會刪除.mine、.r1、.r2這些文件,但這只是標記,如果你直接標記為解決,實際上文件還是沖突的,只是狀態(tài)修復了。
Resolve conflict using 'theirs':使用他的提交覆蓋我的修改來解決沖突。如果你的修改不需要提交,你可以方便的選擇這個。
Resolve conflict using 'mine':使用我本地的版本覆蓋他的來解決沖突。如果對方提交的代碼沒什么用,你可以直接使用這個來解決。
Edit confilicts這個選項就是用來手動解決沖突的,下面詳細講解:

上圖是編輯沖突的界面,如果你的界面顯示了很多空白符號,你可以點擊頂部的“Show Whitespaces”來隱藏。
上圖的左邊.r2展示的是上個版本的變化,右邊.mine是我們本地修改的版本,下面是表示合并后的效果。
左上的第12行下面的綠色等號表示這行被刪除了,13、14行前面的+號表示這兩行是新增的
右上的同樣也是刪除了一行,然后增加了第13行
下面區(qū)域的13,14行顯示的是紅色背景的問號,表示這兩行SVN不知道如何合并代碼。
假設(shè)我們需要13行保留我為我本地的修改,14行使用他人提交的。那么選中右上的第13行,右鍵選擇“Use this text block”,表示使用這行的代碼;

選中左上的14行,右鍵選擇“Use this text block”。這樣就搞定了,下面區(qū)域會顯示合并后的效果

這樣下面區(qū)域的沖突行就全部解決了,點擊頂部工具欄的“Mark as resolved”標記為已解決好沖突,或者直接ctr+s保存也會提示“Mark as resolved”菜單。

到這沖突就完美解決了。
這里再解釋下右鍵沖突行顯示的其他的一些菜單項:
Use this text block:使用這塊代碼為合并后的行
Use this whole file:使用這整個文件作為合并后的文件
Use text block from 'mine' before 'theirs':兩邊的代碼都保留,我的代碼在前面
Use text block from 'theirs' before 'mine':兩邊的代碼都保留,我的代碼在后面
參考:https://segmentfault.com/a/1190000014294501?utm_source=tag-newest
8、提交更改(commit)
當修改文件后,想要提交到服務(wù)器上,就可以使用【SVN Commit】右鍵菜單。Commit 操作是用來將更改從工作副本到版本庫。這個操作會修改版本庫的內(nèi)容,其它開發(fā)者可以通過更新他們的工作副本來查看這些修改。
在提交之前,你必須將文件/目錄添加到待變更列表中。列表中記錄了將會被提交的改動。當提交的時候,我們通常會提供一個注釋來說明為什么會進行這些改動。這個注釋也會成為版本庫歷史記錄的一部分。Commit 是一個原子操作,也就是說要么完全提交成功,要么失敗回滾。用戶不會看到成功提交一半的情況。

在SVN Commit界面,上面的空白框是用于輸入提交的版本信息,當然也可以什么都不寫。在SVN Commit界面的下方,勾選您想要提交的文件,點擊下方的【OK】按鈕,就可以開始提交服務(wù)器了。

某些情況下,當文件出現(xiàn)一些異常的時候,SVN會提示您,需要先【Clean up】清理一下SVN的目錄緩存。這個時候,就在文件夾中點擊鼠標右鍵,選擇【TortoiseSVN】選項,然后選擇【Clean up】選項即可

9、SVN和GIT的區(qū)別
SVN在沒有聯(lián)網(wǎng)的情況下不能進行版本管理,而 Git 就可以。
雖然SVN在沒有聯(lián)網(wǎng)時也可以進行本地修改,但是并不能進行 commit 操作,本地可以寫代碼 ≠ 本地進行代碼管理,svn 的 commit 是直接送到服務(wù)器的,所以說在沒聯(lián)網(wǎng)時沒法進行版本管理。
而 git 的 commit 是本地的,你只有進行 push 操作才會把這次更迭同步到服務(wù)器上。在沒網(wǎng)的時候,git 本地也是一個完整的版本庫,你可以進行全套版本管理。
SVN的基本使用:https://jingyan.baidu.com/article/656db9181137e2e380249c55.html
10、VisualSVN server 服務(wù)端的使用
VisualSVN server 服務(wù)端是用來搭建 SVN 倉庫的,下載地址:https://pan.baidu.com/s/1Fzog_Nt2PbVUzsECJ4npeQ,提取碼:99dl
使用教程可參考:http://www.rzrgm.cn/pungwe/p/10566821.html

浙公網(wǎng)安備 33010602011771號