日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

svn如何退回软件版本_SVN版本控制工具的使用

發(fā)布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 svn如何退回软件版本_SVN版本控制工具的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

技術交流QQ群:1027579432,歡迎你的加入!

1.SVN中的基礎概念repository:源代碼庫,源代碼統一存放的地方

checkout:當手上沒有源代碼時,可以從源代碼庫中checkout一份

commit:當你已經修改了代碼,就需要commit到源代碼倉庫

update:當你已經checkout了一份源代碼后,update一下就可以和源代碼倉庫上的源代碼同步,手上的代碼就會有最新的變更。 日常使用流程:假設你已經在幾天前checkout,update獲取最新的代碼->自己進行修改并調試成功源代碼->commit(大家就可以看到你的修改)

如果兩個程序員同時修改了同一個文件, SVN可以合并這兩個程序員的改動,實際上SVN管理源代碼是以行為單位的,即兩個程序員只要不是修改同一行程序,SVN都會自動合并兩種修改。如果是同一行,SVN 會提示文件 Conflict, 沖突,需要手動確認。

2.linux系統下安裝SVNyum install subversion(Centos下安裝)

sudo apt-get install subversion(Ubuntu下安裝)

查看SVN的版本:subversion --version

cdl@cdl-Inspiron-5421:~$ svn --version

svn,版本 1.9.3 (r1718519)

編譯于 Jul 26 2019,15:51:17 在 x86_64-pc-linux-gnu

3.SVN啟動模式在服務端進行SVN版本庫的相關配置,手動創(chuàng)建版本庫目錄:

cdl@cdl-Inspiron-5421:~$ sudo mkdir /opt/svn

[sudo] cdl 的密碼:

利用SVN命令創(chuàng)建版本庫:

svnadmin create /opt/svn/CurryCoder

使用命令svnserve啟動服務:-r:決定了版本庫的訪問方式;

--listen-port:指定svn監(jiān)聽端口,不加此參數,默認為3690

svnserve -d -r 目錄 --listen-port 端口號

單庫svnserve方式:一個svnserve只能為一個版本庫工作;

svnserve -d -r /opt/svn/CurryCoderauthz配置文件中對版本庫權限的配置為:

[groups]

admin=user1

dev=user2

[/]

@admin=rw

user2=r

使用類似這樣的URL:svn://192.168.0.1/ 即可訪問CurryCoder版本庫

多庫svnserve方式:指定到版本的上級目錄,一個svnserve可以為多個版本庫工作。

svnserve -d -r /opt/svnauthz配置文件中對版本庫的配置:

[groups]

admin=user1

dev=user2

[CurryCoder:/]

@admin=rw

user2=r

?

[CurryCoder01:/]

@admin=rw

user2=r

使用類似這樣的URL:svn://192.168.0.1/CurryCoder 即可訪問CurryCoder版本庫

3.創(chuàng)建版本庫使用svnadmin create 目錄進行創(chuàng)建版本庫。

cdl@cdl-Inspiron-5421:~$ sudo svnadmin create /opt/svn/CurryCoder01 [sudo] cdl 的密碼: cdl@cdl-Inspiron-5421:~$ ll /opt/svn/CurryCoder01/ 總用量 32 drwxr-xr-x 6 root root 4096 5月 26 11:19 ./ drwxr-xr-x 4 root root 4096 5月 26 11:19 ../ drwxr-xr-x 2 root root 4096 5月 26 11:19 conf/ drwxr-sr-x 6 root root 4096 5月 26 11:19 db/ -r--r--r-- 1 root root 2 5月 26 11:19 format drwxr-xr-x 2 root root 4096 5月 26 11:19 hooks/ drwxr-xr-x 2 root root 4096 5月 26 11:19 locks/ -rw-r--r-- 1 root root 246 5月 26 11:19 README.txt

進入/opt/svn/CurryCoder01/conf目錄,修改默認配置文件內容,包括svnserve.conf、passwd、authz等信息。svn服務配置文件為版本庫目錄中的文件conf/svnserve.conf,該文件僅由一個[general]配置字段組成:

[general] anon-access = none # 控制非授權用戶訪問版本庫的權限 auth-access = write # 控制授權用戶訪問版本庫的權限。 password-db = /home/svn/passwd authz-db = /home/svn/authz # 指定權限配置文件名,通過該文件可以實現以路徑為基礎的訪問控制。除非指定絕對路徑,否則文件位置為相對conf目錄的相對路徑。 默認值:authz realm = tiku # 指定版本庫的認證域,即在登錄時提示的認證域名稱。

用戶名口令文件passwd:用戶名口令文件由svnserve.conf的配置項password-db指定,默認為conf目錄中的passwd。該文件僅由一個[users]配置段組成:

[users] admin = admin # = CurryCoder = 123456

權限配置文件:權限配置文件由svnserve.conf的配置項authz-db指定,默認為conf目錄中的authz。該配置文件由一個[groups]配置段和若干個版本庫路徑權限段組成:

[groups] # = g_admin = admin,CurryCoder [admintools:/] # [:] @g_admin = rw * = [test:/home/CurryCoder] CurryCoder = rw * = r

4.checkout(克隆副本)操作通過url svn://192.168.0.1(具體的svn服務器地址)/CurryCoder01 --username=user01,如下所示:

cdl@cdl-Inspiron-5421:~$ svn checkout svn://192.168.0.1/CurryCoder01 --username=user01 A CurryCoder01/trunk A CurryCoder01/branches A CurryCoder01/tags Checked out revision 1.

checkout成功后在當前目錄下生成CurryCoder01副本目錄,如下所示:

root@cdl-Inspiron-5421:/home/cdl# ll CurryCoder01/ total 24 drwxr-xr-x 6 root root 4096 Jul 21 19:19 ./ drwxr-xr-x 3 root root 4096 Jul 21 19:10 ../ drwxr-xr-x 2 root root 4096 Jul 21 19:19 branches/ drwxr-xr-x 4 root root 4096 Jul 21 19:19 .svn/ drwxr-xr-x 2 root root 4096 Jul 21 19:19 tags/ drwxr-xr-x 2 root root 4096 Jul 21 19:19 trunk/

5.解決版本沖突版本沖突的產生原因:假設A和B兩個程序員都在版本號為100時,修改了HelloWorld.html文件。程序員A在修改完成后提交HelloWorld.html文件到服務器。此時,提交成功后HelloWorld.html文件的版本號變?yōu)?01。同時,B程序員在版本號為100的HelloWorld.html文件上修改。修改完成后,提交到服務器時,由于不是在當前最新的101版本上修改的,所以提交時會失敗。

查看修改后的文件內容:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# cat HelloWorld.html HelloWorld! http://www.runoob.com/

查看更改:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn diff Index: HelloWorld.html =================================================================== --- HelloWorld.html (revision 5) +++ HelloWorld.html (working copy) @@ -1,2 +1 @@ -HelloWorld! http://www.runoob.com/ +HelloWorld! http://www.runoob.com/!

user01提交會出現失敗:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn commit -m "change HelloWorld.html first" Sending HelloWorld.html Transmitting file data .svn: E160028: Commit failed (details follow): svn: E160028: File '/trunk/HelloWorld.html' is out of date

提交失敗的原因:HelloWorld.html已經被user02修改并提交到了倉庫。svn不會允許user01提交更改,因為user02已經修改了倉庫,所以user01的工作副本已經失效。為了避免兩人的代碼被互相覆蓋,svn不允許進行這樣的操作。所以user01在提交更改之前必須先更新工作副本。所以使用update命令,如下:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn update Updating '.': C HelloWorld.html Updated to revision 6. Conflict discovered in file 'HelloWorld.html'. Select: (p) postpone, (df) show diff, (e) edit file, (m) merge, (mc) my side of conflict, (tc) their side of conflict, # 輸入mc表示以本地文件為主,也可以使用其他選項對沖突文件進行不同的操作。 (s) show all options: mc Resolved conflicted state of 'HelloWorld.html' Summary of conflicts: Text conflicts: 0 remaining (and 1 already resolved)

默認是更新到最新的版本,也可以指定更新到哪個版本:

svn update -r6

工作副本已經與倉庫同步,可以進行提交:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn commit -m "change HelloWorld.html second"

6.SVN提交操作在版本庫中增加一個readme的說明文件:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# cat readme this is SVN tutorial.

查看工作副本的狀態(tài):

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn status ? readme # ?說明它還未加到版本控制中

將文件readme加到版本控制,等待提交到版本庫。

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn add readme A readme

查看工作副本的狀態(tài):

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn status A readme # A意味著這個文件已經被成功地添加到了版本控制中

為了把readme存儲到版本庫中,使用commit -m加上注釋信息來提交:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn commit -m "SVN readme." Adding readme Transmitting file data . Committed revision 8. svn commit -m "SVN readme."

7.SVN版本回退當我們想放棄對文件的修改,可以使用 SVN revert 命令。svn revert操作將撤銷任何文件或目錄里的局部更改。

對文件readme文件進行修改(readme文件還沒有被提交),查看文件狀態(tài):

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn status M readme # M表示readme文件已經被修改

但是,發(fā)現修改readme文件出現錯誤,要撤銷修改,通過svn revert命令將文件readme回退到未修改狀態(tài):

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn revert readme Reverted 'readme'

revert操作不單單可以使單個文件恢復原狀, 而且可以使整個目錄恢復原狀。恢復目錄用-R命令:

svn revert -R trunk

如何恢復一個已經提交的版本?為了消除一個舊版本,必須撤銷舊版本里的所有更改然后提交一個新版本。首先,找到倉庫的當前版本,假設現在是版本22,我們要撤銷回之前的版本,比如版本21。

svn merge -r 22:21 readme

8.SVN查看歷史信息svn log: 顯示svn的版本作者、日期、路徑等信息;如果只希望查看特定的某兩個版本之間的信息,可以使用:svn log -r 6:8

如果只想查看某個文件的版本修改信息,可以使用:svn log 文件路徑

如果希望得到目錄的信息要加 -v 如果希望顯示限定N條記錄的目錄信息:svn log -l N -v

svn diff: 顯示特定修改的行的詳細信息;如果用svn diff,不帶任何參數,它將會比較你的工作文件與緩存在.svn的"原始"拷貝

比較你工作拷貝和版本庫中版本號為3的文件rule.txt: svn diff -r rule.txt

比較 svn 工作版本中版本號2和3的這個文件的變化:svn diff -r 2:3 rule.txt

svn cat:將特定版本的某個文件內容顯示在屏幕上;如果只是希望檢查一個過去版本,不希望查看它們的區(qū)別: svn cat -r 版本號 rule.txt

svn list:可以在不下載文件到本地目錄的情況下來察看目錄中的文件;

9.SVN分支應用場景:當有人希望開發(fā)過程分開成兩條不同的路線時,此時使用分支。比如項目下有兩個小組,svn下有一個trunk版本。由于客戶需求突然變化,導致項目需要做較大改動,此時項目組決定由小組1繼續(xù)完成原來正進行到一半的工作(某個模塊),小組2進行新需求的開發(fā)。那么此時,我們就可以為小組2建立一個分支,分支其實就是trunk版(主干線)的一個copy版,不過分支也是具有版本控制功能的,而且是和主干線相互獨立的,當然,最后我們可以通過(合并)功能,將分支合并到trunk上來,從而最后合并為一個項目。

本地副本中創(chuàng)建my_branch分支:

root@cdl-Inspiron-5421:~/svn/CurryCoder01# svn copy branches/my_branch

查看狀態(tài):

root@cdl-Inspiron-5421:~/svn/CurryCoder01# svn status A + branches/my_branch A + branches/my_branch/HelloWorld.html A + branches/my_branch/readme

提交新增的分支到版本庫中:

root@cdl-Inspiron-5421:~/svn/CurryCoder01# svn commit -m "add my_branch" Adding branches/my_branch Replacing branches/my_branch/HelloWorld.html Adding branches/my_branch/readme Committed revision 9.

切換到分支路徑并創(chuàng)建index.html文件:

root@cdl-Inspiron-5421:~/svn/CurryCoder01# cd branches/my_branch/ root@cdl-Inspiron-5421:~/svn/CurryCoder01/branches/my_branch# ls HelloWorld.html index.html readme

將index.html加入版本控制,并提交到版本庫中:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/branches/my_branch# svn status ? index.html root@cdl-Inspiron-5421:~/svn/CurryCoder01/branches/my_branch# svn add index.html A index.html root@cdl-Inspiron-5421:~/svn/CurryCoder01/branches/my_branch# svn commit -m "add index.html" Adding index.html Transmitting file data . Committed revision 10.

切換到trunk主分支,執(zhí)行svn update,然后將my_branch分支合并到trunk主分支中:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk# svn merge ../branches/my_branch/ --- Merging r10 into '.': A index.html --- Recording mergeinfo for merge of r10 into '.': G .

將合并好的trunk主分支提交到版本庫中:

root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk# svn commit -m "add index.html" Adding index.html Transmitting file data . Committed revision 11.

10.SVN標簽版本管理系統支持tag選項,通過使用tag的概念,可以給某一個具體版本的代碼一個更加有意義的名字。

在本地工作副本創(chuàng)建一個tag:

root@cdl-Inspiron-5421:~/svn/CurryCoder01# svn copy trunk/ tags/v1.0

A tags/v1.0

上面的代碼成功完成,新的目錄將會被創(chuàng)建在tags目錄下:

root@cdl-Inspiron-5421:~/svn/CurryCoder01# ls tags/

v1.0

root@cdl-Inspiron-5421:~/svn/CurryCoder01# ls tags/v1.0/

HelloWorld.html readme

查看狀態(tài):

root@cdl-Inspiron-5421:~/svn/CurryCoder01# svn status

A + tags/v1.0

提交tag內容:

root@cdl-Inspiron-5421:~/svn/CurryCoder01# svn commit -m "tags v1.0"

Adding tags/v1.0

Transmitting file data ..

Committed revision 14.

總結

以上是生活随笔為你收集整理的svn如何退回软件版本_SVN版本控制工具的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。