1. 程式人生 > >svn的恢復到指定版本操作

svn的恢復到指定版本操作

本文目的

讓未使用過版本控制器軟體或者未使用過subversion軟體的人員儘快上手。

subversion的使用技巧很多,這裡只總結了最小使用集,即主要的基本功能,能夠用來應付日常工作。

因此不涉及subversion伺服器端的搭建和配置。

為什麼要使用版本控制

當多人共同開發同一個軟體時,會涉及原始碼的共享以及帶來的相關問題,比如追究某個程式碼是由誰在什麼時間修改的。

下面列出版本控制帶來的好處:

  • 為團隊提供了所有專案文件的回退按鈕,個人IDE工具只能提供某個檔案的回退按鈕,而不能做到,比如回退到2008年6月12日下午3點10分時的所有專案檔案;
  • 支援多個開發人員在可控的方式下為相同的程式碼工作;
  • 版本控制系統儲存了文件在過去的各個改動,便於查詢是誰,在何時,因為什麼修改了文件;
  • 支援在文件的主線上同時有多個版本(版本的分支和合並是版本控制的主要手段,一些開發團隊僅僅是簡單的共享程式碼主幹);
  • 支援查詢在某個時點上專案各個文件的狀態,可用於研究生產效率等(比如,統計專案哪個時期程式碼提交最活躍,以及每個人的程式碼提交頻次等等),也可用於對以前的軟體發行版的再發行(比如,以前構建的2.0版本的安裝包丟失了,那麼可以通過版本控制器記錄的歷史重新回溯到那個版本,然後重新構建出安裝包)。

為什麼使用subversion

首先,考慮的是使用免費開源和輕量級的版本控制器。

第二,要求使用比較廣泛,可選的有cvs和svn。

這裡選擇svn,主要考慮是比較好整合apache使用,提交程式碼支援原子級操作(即,比如提交3個檔案,如果因為網路或者其他原因,上傳2個檔案後中斷,svn能做到伺服器端回滾到提交前的狀態,而cvs做不到這點,需要手工檢查和恢復)。

subversion的程式構成

subversion程式,和mysql很類似,是c/s結構的,有客戶端和伺服器端。伺服器端和客戶端都是通過命令列方式啟動和執行的。本文只會使用到客戶端的命令。

第三方提供了各種圖形介面的客戶端工具,比如eclipse外掛subclipse,windows圖形介面工具tortoiseSVN。這些後面會提到它們的基本使用。

subversion資源

安裝subversion

有關subversion和subclise的安裝暫略,因為目前提供的虛擬機器開發環境已經安裝和配置。

tortoiseSVN,可到官方網站上下載最新版本的windows安裝包,預設安裝,不需要做其他設定,安裝後需要重啟計算機。能在資源管理器中滑鼠右鍵選單看到如下圖所示條目,就說明安裝成功。

image

使用subversion

日常工作中使用subversion僅僅是幾個命令或者操作,並不複雜。但是它內部的一些機制需要逐漸去理解。

檢出程式碼

在剛開始進入一個開發隊伍的時候,已經有版本控制和軟體專案,使用的第一個命令往往是檢出(checkout)程式碼。或者當使用和研究開源軟體的時候,也是第一個要用到這個命令。這個命令的作用是把專案的原始碼下載到使用者本地,並且帶有版本控制資訊。

比如,執行以下命令獲取一個專案的原始碼:

這個命令將在本地當前目錄建vfs.demo目錄並將該伺服器目錄下的所有檔案下載到本地,並且,會生成隱藏檔案.SVN目錄,用於記錄版本控制資訊。

tortoiseSVN有圖形介面的檢出操作,但是命令列方便快捷,建議使用命令列。

如果使用eclipse並安裝了subclipse外掛,可以通過外掛匯入專案。

image

然後,

image

選擇或者新建資源庫位置,

image

選擇資源庫中的專案目錄。

image

然後,就可以完成(finish)了。

image

初始匯入

何時使用初始匯入,比如,對於java開發人員來說,在eclipse中編寫了一個專案,並決定把專案共享到版本控制器上,這時就需要初始匯入操作了。

以下以subclipse為例說明初始匯入的步驟。

第一步,選擇share project,共享你的專案:

image

選擇通過svn共享專案:

image

填寫svn提交的url:

image

這個url,需要subversion的管理員告知你,還有使用者名稱和密碼。如果想練習一下,google提供了免費的svn,你可以通過:http://code.google.com 申請專案,這樣就會有類似我上面的url和許可權。

然後可以直接點選finish,完成初始提交。選擇next,可以做定製模組名和初始提交的資訊,一般不需要。

如果你的svn伺服器使用了https協議,需要接受一個數字證書,一般選擇永久接受。

image

之後,會要求輸入使用者名稱和密碼。建議勾選儲存密碼,否則會很麻煩。

image

這樣,再看專案,會發現條目上多了問號,這時需要選擇哪些目錄和檔案需要提交,哪些需要忽略,比如生成的class檔案等。

image

選擇需要忽略的檔案或者目錄,這時需要切換到導航檢視下才能看到所有檔案和目錄:

image

從導航檢視看到的情況:

image

選中需要忽略的目錄和檔案,操作svn:

image

然後提交整個專案即可。有關提交的操作見下文。

更新專案

專案在提交前,應該先做更新專案操作。比如有一個檔案a.txt,已經提交到svn中,這樣,可能有其他使用者提交了新的改動到a.txt,你現在又修改了a.txt,準備提交你的改動。先操作更新a.txt,這樣如果該檔案在svn伺服器已經改動,會將改動加入到當前本地的a.txt中。

在subclipse中的操作:

image

提交程式碼

提交程式碼,一般會級聯當前目錄下所有改動的內容。

image

刪除程式碼

對於不再使用的程式碼,可以直接刪除掉,比如通過windows刪除檔案,通過ubuntu的rm命令或者通過eclipse的delete功能,然後提交專案,subclipse會知道哪個檔案被刪除了,並將這個變化通知給svn伺服器。

還原始碼

如果程式碼做了改動,可以是多個檔案,也可以刪除了檔案或者新增了檔案,但是沒有提交到svn伺服器,可以通過還原功能恢復到改動前的樣子。

image

版本的分支與合併

版本的分支和合並,是版本控制的核心功能。

比如,軟體通過版本的分支,將專案分配給多人做分工開發,通過版本合併,將這些分工實現的程式碼合併到新的版本中;或者,修改程式碼bug的時候,可以先打出一個版本分支,保留出現bug的版本,比如分支版本名稱為pre_fix_bug_2201,這裡2201表示bug的代號,然後針對這個分支做修改fix這個bug,再將修改後的內容提交到一個新的分支版本,比如post_fix_bug_2201,再到適當時候將這個分支合併到程式碼主幹中去。

以上說了一下版本分支與合併的用途,這裡簡單說一下svn版本分支合併的基本原理。

首先是版本分支,實際上是將當前版本“copy”到分支上,非常類似windows下,將某個目錄的快捷方式複製到其他路徑。這種copy,可以說是輕量級copy或者叫廉價copy,不是複製版本內容,而是做一個內部的引用。這樣的copy很快,對伺服器也沒有空間上的開銷。

版本的合併,是svn開發中的難點,當做版本合併的時候,伺服器會試圖智慧的合併同一個檔案的不同版本,可能會帶來版本衝突,這需要操作者做手工的處理,消除版本衝突。合理分工的專案應該可以通過管理手段儘量避免這種情況。

以下是通過subclipse演示版本分支的操作。首先,專案文件應該已經全部提交,然後,選擇

image

然後,填寫url,一般是在tags/目錄下:

image

然後預設選項,next即可,然後選擇finish按鈕。在svn的相應路徑下就會有一個同名的專案。

image

打分支,實際上就是建立了一個專案的輕量級copy。

如何從版本的一個分支切換到另外一個分支,這也是很重要的,它能幫助你輕鬆在不同的專案版本中自動切換,而不必在eclipse裡維持多個專案。

image

選擇要切換的專案版本路徑,或者直接輸入亦可。

image 

然後點選ok後,專案即可切換到該版本下。

在分支上做了改動,並且已經提交(一般tags目錄下的專案約定是隻讀的,不建議改動,這裡是為了舉例方便),那麼,可以將這個版本合併到trunk(主幹)程式碼中,讓主幹也擁有最新的程式碼。

image 

選擇需要合併的源,比如從tags上面一個版本,合併到主幹(trunk)程式碼中。

image

之後,需要設定一些合併的特性,這裡預設配置即可。

image

執行完畢後,會有一個合併報告,可見沒有出現衝突情況。

image

這時候看原始碼,可以發現有改動,這些改動就是合併過來的程式碼。

image

改動如果沒有問題,就可以提交,這樣就完成了一次版本的合併工作。

“還原”已經提交的改動

如果文件沒有提交,還原是很容易的,只需執行還原(revert)就可以了。有時候,已經提交了程式碼,結果發現了問題,需要回退到之前提交的版本,就不是很容易了。

這時候的還原,其實是將以前的某個修訂本(revision)覆蓋當前的本地工作拷貝。然後再提交這些改動,成為新的修訂本。

下面演示一下。

首先提交了一個版本的改動,這是以後需要還原回來,這裡,為了以後還原方便,要在提交的訊息中說明改動了什麼。(這一步在開發中是必須的,是紀律)

image

下面,再修改一下專案,然後提交一次,這裡故意增加一個檔案。

image

提交以後,後悔了,想恢復到前一個修訂版。雖然可以通過版本號進行覆蓋還原,但是一般人是無法記憶這個版本號的,另外就是實際情況往往更復雜,不會像示例中那樣是相鄰的兩個修訂版。

所以提交修訂版時的註解訊息就顯得特別重要。

這時可以通過svn的日誌功能檢視到這些版本和它們的註釋訊息。

image

看到歷次版本的訊息內容。

image

這樣,根據註釋,我們很容易找到需要還原到以前的那個修訂版。如果不放心,我們還可以根據上下文選單,對比兩個修訂版的區別。

image

看比較結果。可以看出,增加了一個檔案,另外一個檔案中有一處差異。

image

那麼,可以確定是從125修訂版恢復(還原)。

image

更改後的專案,相當於用125修訂版還原了126修訂版。

image

可以看到126版本新增的檔案不見了,另外VfsDemo.java檔案也還原到125版本的內容。這時提交將成為127版本,這個版本其實就是125版本。算是還原了主幹(trunk)上的程式碼。

image

刷新歷史,可以看到修訂版已經生效。

image

相關推薦

svn恢復指定版本操作

本文目的 讓未使用過版本控制器軟體或者未使用過subversion軟體的人員儘快上手。 subversion的使用技巧很多,這裡只總結了最小使用集,即主要的基本功能,能夠用來應付日常工作。 因此不涉及subversion伺服器端的搭建和配置。 為什麼要使用版本控制

svn merge 指定版本

svn merge功能時,可指定一個或多個版本號,合併的範圍只有指定版本號修改的增量程式碼,不會將指定版本號的全量程式碼合併過來 測試步驟: 1、svn上有兩個路徑test1和test2,其下各有一個

SVN建立指定版本號的分支

 最新版本(HEAD revision in therepository)——直接從版本庫中最新建立,由於不需要從你的工作拷貝中傳輸資料,建立過程會很快。 版本庫中的指定版本(Specific revision in therepository)——同樣是從版本庫中建立,不同的是你可以指定一個版本號。如果你忘

SVN恢復到某一天的版本操作

md4 out 恢復 AS ast fonts rto details visio 為什麽百度答案都那麽多復雜的操作呢,簡單一點不好嗎 https://blog.csdn.net/u014074418/article/details/51837096 兩步大法 第一步:對著

2011-06-30 17:50 SVN恢復到某一天的版本操作

大家好 我是GIS理想 最近有點累 更新博文有點落後了 明天就要七一了 一則為了給六月一個交代 二則又是恰逢黨的生日 糾結了半晌 還是提筆略記一篇吧  SVN除了日常的程式碼提交 更新之外 很少做一些其他高階的操作 曾經想把整個庫的版本整體換到某天的全部程式碼 竟然不知道怎

SVN恢復到某一天的版本操作

SVN除了日常的程式碼提交 更新之外 很少做一些其他高階的操作 曾經想把整個庫的版本整體換到某天的全部程式碼 竟然不知道怎麼操作 …正好 文件人員有心 事隔許久 竟然主動告知我了 於是我當機立斷 才有了現在的奮筆疾書….呵呵  閒話少扯 言歸正傳 第一步:對著你的專案 右鍵

使用Docker官方yum源安裝指定版本的docker的標準操作流程

解除安裝老版本的Docker,沒有安裝則不解除安裝。 yum remove docker \ docker-client \ docker-client-latest \

svn匯出歷史版本指定版本

svn作為為團隊協作或記錄工程不同版本的非常優秀的軟體,極大的提高團隊工作的效率。 在使用svn過程中,難免會遇到需要追溯歷史版本,接下來,簡單明瞭的展示如何進行歷史版本的下載~ 1.檢視專案歷史版本 資料夾--右鍵--TortoiseSVN--Show log 出現類似以下介面:

Intellij Idea 使用SVN更新到指定版本

使用問題 預設情況下,changes檢視,在Incoming中更新任意版本,整個專案都會被更新。這樣會導致的更新到很多不應該更新的版本。 解決方法 方法很簡單,只用在原本操作的過程中勾選指定版本即可。詳細步驟如下: 進入changes檢視,進入Incom

linux svn更新到指定版本

有時候測試環境會讓更新到指定版本,用以驗證問題或者其他原因 具體方法有兩種: 方法1: svn merge回滾 1) 先 svn up,保證更新到最新的版本,如2106; 2) 然後用 svn log ,檢視歷史修改,找出要恢復的版本,如2105 。如果

Linux 下svn恢復到某一版本

有兩種方法可以實現: 方法1: 用svn merge  1) 先 svn up,保證更新到最新的版本,如20;  2) 然後用 svn log ,檢視歷史修改,找出要恢復的版本,如10 。如果想要更詳細的瞭解情況,可以使用svn diff -r 10:20 [檔案或目錄];

如何使用SVN checkout到某個專案的指定版本(Win 10系統)

這篇日誌也是來源於研究中的實際需求。在之前的部落格中,我總結了Git在實現類似目的時的方法,最近在實驗中使用到的一個數據集,其中的專案全都是在SourceForge上用SVN進行版本管理的,我對SVN實在不熟悉,所以花了些時間看看怎麼實現標題中的這個目的。 實際上和Git類

一、 SVN概述&工作方式&恢復歷史版本

恢復 image com 文件 nbsp 合並 桌面文件 本地倉庫 ima What why how 1 什麽是SVN?作用是什麽? SVN(SubVersion),版本控制系統.采用了分支管理系統,用於多人共同開發一個項目,共用資源的目的。 2 為什

InterlliJ,WebStorm 等SVN 恢復到歷史版本

使用問題 預設情況下,changes檢視,在Incoming中更新任意版本,整個專案都會被更新。這樣會導致的更新到很多不應該更新的版本。 解決方法 方法很簡單,只用在原本操作的過程中勾選指定版本即可。詳細步驟如下: 進入changes檢視,進入Incoming,右擊新增版

svn命令列回滾到指定版本

1 連結 個人部落格: alex-my.xyz CSDN: blog.csdn.net/alex_my 2 回滾 根據日誌查出的版本號進行回滾 // 放棄當前修改 svn rever

Idea解決SVN的衝突、以及利用SVN更新到指定版本

1、解決衝突 當B使用者提交程式碼發生衝突後,可以再次選擇更新: 選擇OK: 彈窗如下: 如果選擇Merge…,則彈出版本差異的視窗,讓使用者自行檢視差異後再選擇以哪個版本的修改為準: 2、更新到指定版本 右鍵工程:

git回滾到某個版本操作

單機 技術分享 ast ima logs strong .cn master blog git回滾到某個版本操作: 1.git log //查看指過去的版本 2. git reset --hard 復制上面commit後的字符串到此處 如果只想 回滾單機的,那麽到

Linux哪個版本操作系統比較適合

linux操作系統想挑選最適合你需求的Linux發行版,首先要確定你是歸於哪一種類型的Linux用戶。我以為,在桌面上運轉Linux的最大優點之一在於,挑選多多。Linux愛好者可以享受一系列廣泛的桌面環境、文件管理器、終端、GTK與Qt軟件,當然還有Linux發行版自身。可是話又說回來,所有這些選擇似乎讓人

git回溯到指定版本

spa 指定版本 center margin gin png align 不為 blog git回溯到指定版本       git log命令查看倉庫日誌       然後使用git checkout 命令       例如回溯到上圖中的版本       git c

SVN如何將版本庫url訪問地址中的https改為http

ima svn 面板 連接 協議 版本 nbsp .com 控制臺 1、選擇控制臺樹中的根節點,右鍵選擇“屬性”。 2、切換至面板“網絡”。 3、取消勾選項“使用安全連接協議(https://)”。 SVN如何將版本庫url訪問地址中的https改為http