「SVN」Ubuntu 版本库搭建+使用 完整教程
序
重新寫一篇,發現svn有了中文版教程,一下興致就上頭。正好新項目要搭建svn環境,開一篇復習復習。發誓一定寫完整!
真正開始搭建才發現上面鏈接里的教程并沒什么用,因為需要搭建版本庫使用的系統是ubuntu,而上面的教程是基于windows系統
環境與依賴
系統:Ubuntu 18.04
使用HTTP協議訪問SVN存儲庫需要安裝:Apache 2
使用HTTPS協議訪問SVN存儲庫需要安裝:Apache 2 + OpenSSL
SVN簡介
不同于GitHub,SVN版本控制使用集中式的管理方法,需要一臺主機作為中心服務器。因此一般會使用服務器作為中心主機,在中心主機上搭建版本庫,其他主機從中心主機上拉取代碼,修改,并上傳修改后的代碼到中心主機。
SVN安裝
sudo apt install subversion
svn版本庫用戶命令簡要
svn命令由svn+子命令+選項+參數構成,大部分子命令都會以文件或者文件夾作為參數,并且對文件夾中的文件遞歸執行命令。因此如果子命令中沒有提供參數,svn默認在當前目錄(包括當前目錄)遞歸執行命令
下面的內容只是非常簡要地指出了命令的大概操作,具體使用細節請直接svn 命令 --help查看。
svn --help:查看幫助
svn checkout:從版本庫中導出工作副本
svn update/up:將版本庫的修改合并到工作副本中,一般是在commit前先update一下
svn add PATH:添加文件/文件夾到版本控制,此時未上傳至服務器
svn commit [PATH]:提交添加的文件/文件夾到服務器,服務器會生成一個更新的代碼版本
svn export:導出一個無版本控制的文件副本,需要指定導出版本
svn import:將未納入版本控制的文件提交到版本
svn list/ls:列出版本庫中的目錄內容
svn cleanup [PATH]:遞歸清理工作副本,移除寫鎖,恢復未完成的操作等
svn copy/cp:從倉庫或當前工作文檔中拷貝文件或目錄
svn delete/del/remove/rm:從版本庫中刪除文件和目錄
svn diff:顯示兩個修改或路徑之間的本地更改或差異
svn info:顯示有關本地或遠程項目的信息
svn lock:鎖定版本庫中的路徑,使得其他用戶不能向其提交修改
svn unlock:解除工作副本或URL的鎖定
svn merge:合并多個修改到一個工作副本中
svn mkdir:創建納入版本控制的新目錄
svn move/mv/rename/ren:移動/重命名工作副本或倉庫中的項目
svn upgrade:升級工作副本的元數據存儲格式
svn status:顯示本地修改的文件列表
svn auth
svn log
svn mergeinfo
svn patch
svn propdel
svn propedit
svn propget
svn proplist
svn propset
svn relocate
svn resolve
svn resolved
svn revert
svn switch
svn blame/praise/annotate/ann
svn changelist
svn cat
svn版本庫管理者命令簡要
版本庫管理者使用命令是svnadmin 子命令 路徑 參數,與svn使用者的命令不同,注意區分
svnadmin crashtest:在 REPOS_PATH 打開存儲庫,然后中止,從而模擬在持有打開的存儲庫句柄時崩潰的進程
svnadmin create:創建一個新的,空的倉庫
svnadmin dump:將文件系統的內容以“dumpfile”可移植格式轉儲到標準輸出,向標準錯誤發送反饋
svnadmin hotcopy:熱拷貝(?hot copy)一個倉庫
svnadmin info:打印倉庫信息
svnadmin load:加載dump后的文件,并作為一個新的修訂到文件系統中。如果倉庫之前是空的,那么UUID將會默認改成文件中的第一個;如果指定了 --revision,則將加載的修訂限制為僅轉儲流中修訂號與指定范圍匹配的修訂
svnadmin lock:通過 USERNAME 設置 COMMENT-FILE 中的注釋來鎖定 PATH
svnadmin lslocks:打印所有鎖的描述
svnadmin lstxns:打印所有未提交事務的名稱
svnadmin pack:將版本庫壓縮為更搞笑的存儲模型
svnadmin recover:在存儲庫上運行恢復過程
svnadmin rmlocks:無條件移除已鎖倉庫上的鎖
svnadmin rmtxns:刪除事務
svnadmin setuuid:重設倉庫的UUID
svnadmin unlock:在驗證與鎖關聯的令牌與 TOKEN 匹配后,解鎖鎖
svnadmin upgrade:將存儲庫升級到支持的最新架構的版本
svnadmin verify:確認倉庫中存儲的數據
svnadmin setrevprop
svnadmin setlogs
svnadmin list-unused-dblogs
svnadmin list-dblogs
svnadmin freeze
svnadmin deltify
svnadmin delrevprop
搭建版本庫
創建svn用戶組
創建svn項目文件夾
一般會在/srv/svn、/usr/local/svn、/home/svn等地方創建svn文件,然后在svn文件夾內創建項目文件夾,不同項目建立不同的文件夾,但均放在svn文件夾下;在這里創建的svn文件夾,里面包含的各個項目的文件夾并沒有存儲代碼文件,而是存儲的存儲了歷史版本代碼的封裝文件
如果問,如何在服務器上修改和編輯實體代碼,并上傳到版本庫,那么你可以在服務器任何一個你想存放代碼的位置,使用svn從版本庫中拉取代碼即可,即在服務器上拉取服務器存儲的代碼
創建svn倉庫
sudo svnadmin create 項目文件夾絕對路徑
執行該命令后項目文件夾會有一些svn自帶的文件和文件夾,
更正文件夾限權
sudo chown -R www-data:svn 項目文件夾
sudo chmod -R g+rws 項目文件夾
添加原始代碼
在做完上面的工作后,版本控制庫已經建立完畢
如果想在服務器做到像遠程主機那樣修改、提交代碼,或者想添加一份原始代碼到服務器,那么服務器和遠程主機均可以,只是服務器拉取版本庫代碼跟遠程拉取的命令不同
一個在服務器本地提交代碼的例子
-
假設
假設服務器上的版本庫中沒有代碼 -
流程
- 在一個你期望存放代碼的地方打開終端
- 使用本地拉取命令:sudo checkout file:///absolute/path/of/your/project/in/svn/folder,此時從svn文件夾下拷貝了一個工作副本
- 將代碼復制粘貼進2生成的文件夾
- 執行svn add *添加文件
- 執行svn commit -m "first time add code, this is version 1",即可在服務器上將代碼提交到服務器的版本庫
一個在遠程主機提交代碼的例子
-
假設
假設服務器上的版本庫中沒有代碼 -
流程
- 在一個你期望存放代碼的地方打開終端
- 使用遠程訪問命令:svn checkout svn+ssh://username@hostname/absolute/path/of/your/project/in/svn/folder,此時從svn文件夾下拷貝了一個工作副本
- 將代碼復制粘貼進2生成的文件夾
- 執行svn add *添加文件
- 執行svn commit -m "first time add code, this is version 1",即可在遠程主機上將代碼提交到服務器的版本庫
訪問方法
上面是在存放版本庫的服務器搭建倉庫,下面是其他主機訪問服務器的方法。訪問方法一共有五種:
- 本地訪問:一般是在服務器上自身訪問自己
- http訪問
- https訪問
- svn訪問
- svn+ssh訪問
在這里只講svn+ssh的訪問方法,其他方法的細節見參考鏈接的第一條。
本機直接訪問
該方法只用于訪問來自同一臺機器(服務器自己訪問自己)的svn,在版本庫搭建好后,在期望存放代碼的地方直接打開終端,使用下面的命令,即可拉取代碼:
svn checkout file:///absolute/path/to/your/project
svn checkout file://localhost/absolute/path/to/your/project
上面兩個命令的區別在于file冒號后的斜杠(/)數量,使用///就不需要再加上主機名,使用//則需要加上主機名
svn+ssh訪問
使用該方法的前提是能夠在終端中使用ssh遠程登錄服務器。如果滿足上面的條件,則
即可拉取遠程服務器上的文件/文件夾到本機,后續修改后,直接add+commit提交到遠程服務器即可
參考鏈接
SVN on Linux
HTTP和HTTPS的區別
總結
以上是生活随笔為你收集整理的「SVN」Ubuntu 版本库搭建+使用 完整教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在家里制作健康的烤蔬菜串?
- 下一篇: 如何蒸牛肉片?