從零開始SVN(1)--服務端與命令行操作


相關:從零開始SVN(2)–Eclipse、Subclipse、分支開發


概述

在團隊開發的過程中,通常有如下需求:協同修改、數據備份、版本管理、權限控制、歷史記錄等,因此有了版本控制的思想。

版本控制

指對軟件開發過程中各種程序代碼、配置文件及說明文檔等文件變更的管理,是軟件配置管理的核心思想之一。

版本控制工具

對版本控制思想的具體實現,版本控制工具可以分爲集中式、分佈式兩種。

  • 集中式:CVS、SVN、VSS···
  • 分佈式:GIT

由於將入職的公司使用 SVN 較多,所以在這具體地學習一下。

SVN

SVN 全稱 Subversion,採用 C/S 結構設計,常用的操作如下:

image-20200512160436250

  • Checkour:檢出,從服務器端的版本庫中下載需要的內容到本地。在一次開發中,只需做一次。
  • Update:更新,把服務器端相對於本地的修改下載到本地。
  • Commit:提交,將本地的修改上傳到服務器。

Linux下的安裝和使用

服務器端安裝

爲了學習演示客戶端的操作,先在雲服務器上搭建自己的 SVN 版本庫。

  1. 首先安裝服務器端程序,查看版本信息

yum install -y subversion

svn --version

image-20200512161419003

  1. 創建並配置版本庫

mkdir /usr/local/svn/repository -p // 創建版本庫目錄

cd /usr/local/svn/repository

mkdir mypro //在版本庫目錄下創建具體項目目錄

svnadmin create mypro/ //真正創建 SVN 版本庫

創建完項目的版本庫後,版本庫中有以下默認內容:

image-20200512162238034

  1. 配置並啓動 SVN 服務

vim /etc/sysconfig/svnserve //修改 SVN 默認根目錄

image-20200512164616935

systemctl enable svnserve.service //設置開機啓動

systemctl start svnserve.service //啓動 SVN 服務

ps aux | grep svn //檢查是否啓動成功

image-20200512164839942

注: SVN 默認使用 3690 端口,雲服務器需要開放相應端口。


命令行操作

命令行的操作,可以創建兩個工作區來模擬兩個開發人員:

image-20200512165101194

檢出

開發人員檢出項目

svn checkout svn://ip.ip.ip.ip/mypro ./ //檢出版本庫中所有內容

harry、sally 分別執行以上命令,目錄下會自動創建 .svn 目錄:

image-20200512165944213

image-20200512170706425

修改版本庫的url:

svn sw --relocate svn://old_ip/目錄 svn://new_ip/目錄

添加

SVN 要求提交一個新建的文件前需要先把它添加到版本控制體系(區別於版本庫)中:

svn add xxx

在 harry 下創建 hello.txt 文件,並添加到版本控制體系中:

image-20200512182109632

提交

提交之前,需要設置版本庫的權限,在 …/mypro/conf 下的 svnserve.conf 文件中進行配置,下圖開啓匿名的寫權限:

image-20200512182515503

之後可以提交 harry 創建的文件,由下圖可知上傳成功,且當前版本爲1:

svn commit xxx -m “描述”

image-20200512182725464

在服務端就可以看到我們提交的文件:

svn list svn://ip.ip.ip.ip/mypro

image-20200512182956093

更新

前面 harry 用戶提交了文件,對服務端的版本庫產生了修改,而 sally 用戶檢出的版本還是上一個版本,這時 sally 用戶就可以進行更新的操作:

svn update [文件名] // []表示可選

image-20200512183348450


衝突與解決

衝突的產生

過時文件:開發人員本地的版本相對服務器端版本來說是舊的版本,在舊的版本上進行了修改。

產生衝突的條件

  • 本地當前編輯的文件已經過時了。
  • 從服務器端更新下來的修改和本地的修改在“同文件同位置”不一致。

製造衝突

在命令行我們可以製造衝突。

  • harry:

image-20200514110319175

  • sally:

image-20200514110414143

這時我們先提交 sally 修改後的 hello.txt:

image-20200514111537597

此時,harry 本地的版本是落後於服務端的,harry 在提交時就會提醒本地文件已經過時:

image-20200514111836232

然後我們執行更新操作,這時候就產生了衝突,我們先選擇 p 推遲:

image-20200514112151345

衝突表現

  • 文件內:

    image-20200514112738236

  • 目錄內(r後面的數字表示版本號):

    image-20200514113125005

衝突的解決

手動解決

  1. 刪除衝突發生時產生的三個文件
  2. 刪除衝突文件內多餘的符號
  3. 將文件編輯到滿意的狀態後提交

半自動解決

  1. 設置 SVN_EDITOR 環境變量

    which vim //獲取 vim 的路徑

    vim /etc/profile //編輯 profile 文件

    //在文件下面加入: export SVN_EDITOR= vim 的路徑

    source /etc/profile 系統重新加載 profile

  2. 在 svn 給我們的選擇中,選擇 e 進行編輯

    image-20200514114527294

  3. 編輯滿意後,選擇 r 選項標記此衝突已解決(解決後得再次提交)

    image-20200514114701044

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章