天天看點

SVN之于GIT的理論優勢

SVN之于GIT的理論優勢

SVN之于GIT的理論優勢

目錄

使用SVN管理代碼

SVN

用戶端:TortoiseSVN

伺服器:VisualSVN Server

管理證書

建立使用者、使用者組

建立倉庫

下載下傳倉庫(checkout)

送出(push)、更新(pull)

檢視曆史記錄

本地撤銷、撤銷曆史送出、回退版本

忽略檔案(本地變化)

建立分支(雲端變化)

合并分支

解決沖突

備份

SVN托管平台

展開

官網:https://subversion.apache.org/

SVN之于GIT的理論優勢

SVN(SubVersion)是Apache下一個開源的中心化版本控制系統,采用用戶端/伺服器架構存放項目倉庫(倉庫 = 代碼 + 曆史)。和分布式的Git相比,中心化的SVN有以下的諸多特點:

·中心化架構,輕量簡單,适合中小規模的項目

·用戶端本地不存儲曆史檔案,節省空間(已有的記錄不會自删)

·SVN更像是一個公共雲端檔案系統,使用http/DAV協定驅動

·擁有連續的整數版本号(修訂号)

·弱化了“分支”的概念,svn分支實質上就是檔案夾的拷貝,友善切換

·中心化的管理模式允許更精細的權限劃分

·每一級目錄都可以單獨同步

·中心化存儲易造成單點故障,需要定期備份

官網:https://tortoisesvn.net/

TortoiseSVN是Windows下最流行的SVN用戶端GUI工具,它的特點是基于Windows Explorer(檔案資料總管),通過檔案圖示,上下文菜單等形式實作SVN的功能,不用打開額外的應用程式。

SVN之于GIT的理論優勢

官網:https://www.visualsvn.com/server/

VisualSVN Server是Windows下一個簡單易上手的SVN伺服器兼GUI軟體,支援web通路。

SVN之于GIT的理論優勢

服務啟動後,Visual SVN會自動在系統的“證書管理器”中添加一份以主機名為域名的根證書,證書的位置為“受信任的根證書頒發機構”,也就是非出廠自帶的第三方自簽名證書的存放位置。可以通過https安全通路這個域名,如下圖是我的主機名證書。

SVN之于GIT的理論優勢

VisualSVN Server推薦用https,預設是基于主機名臨時簽發的自簽名證書,可以在設定中更換。同時推薦在network面闆中勾選“Automatically redirect HTTP to HTTPS(listen on port 80)”相容http。

SVN之于GIT的理論優勢

打開VisualSVN Server Manager,添加使用者。使用者名和密碼即可以下載下傳svn倉庫,也可以登入web網頁。

SVN之于GIT的理論優勢

點選添加使用者組,輸入組名,添加組成員。

SVN之于GIT的理論優勢

後期可在任何檔案夾的Properties中設定任何使用者/使用者組的讀/寫權限。

SVN之于GIT的理論優勢

打開VisualSVN Server Manager,添加倉庫。倉庫類型選擇第一個正常FSFS即可,第二個VDFS是VisualSVN基于FSFS的私有格式,一般用不到。

SVN之于GIT的理論優勢

選擇空倉庫,後期根據項目需求設定目錄結構,不必采用trunk、branches、tags的結構。

SVN之于GIT的理論優勢

初始化使用者權限,選擇預設,以後再根據不同的目錄結構配置設定權限。

SVN之于GIT的理論優勢

複制倉庫的URL位址,在檔案資料總管或桌面空白處右鍵點選SVN checkout。

SVN之于GIT的理論優勢

輸入倉庫的URL以及拷貝到本地的位置,Fully recursive指遞歸拷貝所有檔案,HEAD revision指最新版本。

SVN之于GIT的理論優勢

下載下傳成功後,本地目錄中有一個.svn的隐藏目錄是用來存放倉庫的中繼資料,不要碰它。

SVN之于GIT的理論優勢

空白處右鍵菜單中,SVN Update是從雲端拉最新代碼,SVN Commit是送出本地更新的代碼。送出面闆中,在Changes made中勾選需要送出的檔案,或點選All全選。

SVN之于GIT的理論優勢

注意,如果選中某個檔案點選更新(而不是空白處),隻會更新這個檔案。

可以從用戶端(Tortoise)和網頁端(Visual)2種途徑檢視倉庫的曆史記錄。

1.TortoiseSVN用戶端上選擇show log

2.浏覽器中通路VisualSVN網頁端

·本地撤銷:撤銷本地未送出的更新

·撤銷曆史送出:撤銷某次送出的變更,可能引起沖突

·回退版本:恢複到某個版本,相當于若幹次“撤銷曆史送出”

這3個概念容易混淆(3者的英文都包含“Revert”),首先,“本地撤銷”就是将所有還未送出的變動撤銷掉,對雲端無任何影響:上下文菜單中點選Revert,然後選擇要撤銷的檔案。

SVN之于GIT的理論優勢

之後可以觀察到檔案圖示的變化:

SVN之于GIT的理論優勢

然後,“撤銷曆史送出”是指選擇曆史記錄中的某條記錄,撤銷該條記錄的變更,形成新的變更,如果這條記錄是很久以前的,撤銷時候可能會引起沖突。同樣會形成新變更的是“回退版本”,後者實質上是若幹次“撤銷曆史送出”的總和,即指定版本到最新版本之間的每次送出,是以“回退版本”不會引起沖突。

這兩個操作需要在曆史記錄視窗中選擇某曆史版本,右鍵選擇Revert changes from this revision或者Revert to this revision。

SVN之于GIT的理論優勢

Git通過.gitignore忽略檔案,TortoiseSVN通過對檔案右鍵菜單中選擇TortoiseSVN > Add to ignore list來實作,tortoise會幫你添加進svn:global-ignore中。

SVN之于GIT的理論優勢

注意,忽略設定完後要送出,以同步雲端(目錄的屬性變化)。

SVN中建立分支的實質就是拷貝目錄,是以有多種方式可以切分支,最簡單的方式是在TortoiseSVN的Repo-browser中,對想要拷貝的目錄(可以是根目錄)右鍵選擇copy to拷貝到新目錄,進而建立所謂的分支。

SVN之于GIT的理論優勢

注意,拷貝後隻在服務端生效,需要SVN update一下同步到本地。

和Git一樣,SVN有好幾種合并的方式,但多數情況下都是把分支中的修改合并到主幹上來,本文隻介紹這一種主要情況:在主幹目錄右鍵選擇merge,選擇第一個選項Merge a range of revisions。

SVN之于GIT的理論優勢

一路下一步确定源和目标的範圍,最後點選Test merge測試是否有沖突,如果沒有則順利合并。

SVN之于GIT的理論優勢

注意:可以合并檔案也可以合并整個檔案夾。

無論是拉代碼還是合并代碼都有可能出現沖突,按照官方的說法,有3種類型的沖突:

·檔案沖突:通常發生在檔案同一行被多個人修改後

·屬性沖突:檔案/檔案夾屬性被改變時,比如忽略屬性

·樹沖突:移動/删除/重命名時易發生

注意,建議養成每次開始改動前先更新代碼的習慣,進而減少沖突的可能性。

因為SVN“中心化”的天然特性,需要定期備份避免資料丢失。在VisualSVN Server上對某個倉庫選擇Backup,存儲為.vsvnbak格式的檔案,最好發送到其他機器上。

SVN之于GIT的理論優勢

·Github對SVN的支援:https://docs.github.com/en/github/importing-your-projects-to-github/support-for-subversion-clients

·SVNBucket(國内):https://svnbucket.com/

·SilkSVN:https://sliksvn.com/

(SVN真香)