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