跳到主要內容

SVN簡明課程

1. 版本控制介紹



1.1. 什麼是版本控制


版本控制系統用於保存編寫開發應用程序時的文檔的各個修訂版(revision)。
版本控制也稱作Revision Control System(RCS)。
名詞解釋:
  • 修訂版(revision):可以認為是某個文件在其生命週期內各個保存的快照,每個快照和一個時間區間對應。
  • 版本庫(Repository):存放修訂版的數據庫
  • 本地工作拷貝(Local working copy):修訂版在本地的副本
  • 版本的檢入(Check in):本地副本提交到服務器的版本庫
  • 檢出(Check out):從服務器的版本庫中取出修訂版成為本地副本
  • 版本號的來源:有兩種策略,基於文件的計數和基於倉庫的計數,subversion使用後者
  • 標籤(Tags):為版本加一個名字,便於檢出
  • 分支(Branches):修訂版打分支,以後可以平行修改,互不干擾
  • 合併(Merging):將分支的修訂版合併為一個新的修訂版
  • 鎖(Locking):為修訂版枷鎖
  • 衝突(Conflict):並發版本控制時防止修訂版混亂的錯誤機制

1.2. 使用版本控制的好處


對團隊和個人都有好處:
  • 為團隊提供了所有項目文檔的回退按鈕;
  • 支持多個開發人員在可控的方式下為相同的代碼工作;
  • 版本控制系統保存了文檔在過去的各個改動,便於查找是誰,在何時,因為什麼修改了文檔;
  • 支持在文檔的主線上同時有多個版本;
  • 支持查詢在某個時點上項目各個文檔的狀態,可用於研究生產效率等,也可用於對以前的軟件發行版的再發行。

1.3. 常見的版本控制系統



2. Subversion介紹


Subversion是新一代的版本控制工具,正逐步替代CVS。
資源:

3. Subversion基本使用



3.1. Subversion安裝


Subversion是典型的C/S模式應用程序。
安裝過程很簡單,圖形界面,默認選擇即可。
輸入svn命令查看安裝是否成功:

svn --version

svn命令是subversion程序的客戶端
svnserver命令可以啟動svn服務器,用於搭建簡易的svn服務器環境

3.2. 服務器端


以下是搭建簡易的服務器端環境的做法,正式一般配合apache通過http訪問。

3.2.1. 創建版本庫


創建服務器端版本庫,相當於DBMS創建數據庫示例。
命令行:

svnadmin create file_path/repo_name


3.2.2. 啟動服務器



svnserve.exe -d  -r file_path

  • -d 後台執行
  • -r 版本庫的根目錄
訪問該版本庫的url:svn//localhost/repo_name

3.3. 客戶端



3.3.1. 初始導入(import)


通過命令行導入:

svn import -m "init import" http://10.0.0.6/svn/teaching/

該命令可將當前路徑下文件導入到版本庫中。

3.3.2. 檢出(checkout)


通過命令行檢入:

svn co http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1

或者:

svn checkout http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1

或者:通過第三方圖形工具的檢出,比如tortoiseSVN(http://tortoisesvn.tigris.org/)
將svn服務器的最新修訂版下載到本地成為本地工作拷貝。

3.3.3. 保持更新(update)


命令行:

svn update

或者

svn up

或者通過tortoiseSVN
用svn服務器的最新修訂版更新本地工作拷貝。
多人合作時:
  • 更新要經常頻繁的做,儘量讓問題及早暴露,便於處理。
  • 提交代碼前要更新,否則容易產生版本衝突。

3.3.4. 添加(add)


命令行:

svn add file_path

或者通過tortoiseSVN,eclipse插件。
告知svn服務器,添加目錄和/或文件到服務器上,這個操作類似SQL的insert,但是並沒有真的操作,直到commit。

3.3.5. 提交改動


相當於通用概念:檢入(checkin)。
命令行:

svn commit

或者:

svn ci

或者通過tortoiseSVN,eclipse插件。
提交本地工作拷貝的所有改動,而且是原子性的。
要求:一般要註明修改的原因

svn ci -m "修改bug #224"

要求:提交之前要做更新

svn up
svn ci -m "修改bug #224"


3.3.6. 還原改動


對應提交(commit),要有類似回滾(rollback)的操作。

svn revert

或者通過tortoiseSVN,eclipse插件。
這個操作對開發人員十分有用,在改動被人很多代碼後可以「一鍵恢復」。

3.3.7. 「還原」已提交的改動


revert只適合未提交的情況。
如果已經提交,發現問題,要回退到之前的修訂版。
首先需要:

svn up

讓本地工作拷貝更新到最新狀態。
然後:

svn log your_file_path

查看文件日誌,這時候提交時填寫的說明信息就派上用場了。
查看兩個修訂版之間的不同:

svn diff -r 舊修訂版序號:新修訂版序號 your_file_path

或者通過tortoiseSVN,eclipse插件。
決定用哪個舊的修訂版號後,用舊的修訂版號文件覆蓋新的修訂版號文件。

svn merge -r 新修訂版序號:舊修訂版序號 your_file_path

還需要:

svn commit -m "恢復到某修訂版(某修訂版作廢)"

或者通過tortoiseSVN,eclipse插件。
這個還原是所謂的,不是用舊的版本號替代,而是將舊文件覆蓋新文件。

3.3.8. 拷貝文件和目錄


命令行:

svn copy path/file_name newpath/new_file_name
svn commit -m "xxxx"

或者:

svn cp path/file_name newpath/new_file_name
svn commit -m "xxxx"

或者:利用windows的資源管理器/unix的cp命令
或者通過tortoiseSVN,eclipse插件。
svn的copy,是很重要的工具,版本分支和標籤等概念都通過它實現。
svn的copy,是廉價的拷貝。

3.3.9. 重命名目錄/文件


命令行:

svn move file_name new_file_name

或者:

svn mv file_name new_file_name


3.3.10. 處理合併衝突


svn默認不對文件加鎖。
如果不同人編輯了同一個文件的不同部分,提交時會自動合併。
如果不同人編輯了同一個文件的同一部分,後提交者會報告合併衝突。
解決方法(人工仲裁):
  • 放棄改動;
  • 堅持你的改動,找到.mine的文件名,恢復為原文件名,然後執行:
    svn resolved file_name
     

3.3.11. 刪除文件


將本地工作拷貝刪除。
命令行:

svn delete file_path

或者:

svn del file_path


4. Subversion高級內容



4.1. 文件鎖


一般用於二進制內容,因為無法合併。
如果某個文件加鎖,其他用戶的本地工作拷貝(更新後)將是只讀的。
當該用戶提交後,其他用戶的本地工作拷貝(更新後)才可以寫操作。
其他用戶可以「撬鎖」,然後進行寫操作。
高級配置可以配置「撬鎖」權限,使不是什麼人都可以「撬鎖」。

4.2. 版本庫創建策略


單一的版本庫保存一個項目。
單一的版本庫保存多個項目。
多個版本庫。

4.3. 使用標籤和分支


在svn中標籤和分支都源於copy命令。
3個約定俗成的目錄:
  • trunk:主幹
  • branches:分支
  • tags:標籤
發佈分支:

svn cp -m "創建用於實現radio標籤的分支" https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1 https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

切換分支:

svn switch https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

合併分支需要兩個步驟:
合併操作

svn merge -r 33:HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

或者:

svn merge https://easymorse-simpletag.googlecode.com/svn/trunk/simpletag@HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1@HEAD

提交。

5. 未講到的內容


  • svn備份
  • subversion屬性
  • 與apache集成的配置和使用

留言

這個網誌中的熱門文章

Effortless English - MP3 Free Download ( 167 )

Effortless English - MP3 Free Download ( 167 ) You can download here free AJ Hoge's podcasts, upload them to your mp3 player and improve your English listening at least 30 minutes everyday. To download mp3 click right button of your mouse and select "Save as". Click here to go to the official Effortless English website! General: Power_English_Update.mp3 Models_Etc.mp3 Audio_Twitter_Tweets.mp3 AJ_Update.mp3 Hitch_1_Commentary.mp3 Hitch_1.mp3 Hitch_1_MS-POV.mp3 Hitch_1_MS.mp3 Hitch_1_Vocab.mp3 English_Mastery_Formula.mp3 New_English_Club.mp3 Learn_English_Naturally.mp3 Back_Home.mp3 The_Best_Investment.mp3 Seminar_In_Bangkok_Jan25.mp3 New_Year_Resolution.mp3 Subconscious_Learning.mp3 Intensely.mp3 Super_Fast.mp3 English_Learning_Psychology.mp3 English_Club_2.mp3 Your_First_Lesson.mp3 Business_English_For_New_Business.mp3 Learn_English_Conversation.mp3 Learn_English_Grammar.mp3 Business_vs_Self-Employment.mp3 Learn_Business_English_Eff...

如何將SRT亂碼轉換成繁體字幕

avi格式的電影常常需要搭配srt格式的檔案來顯示字幕,最常見的字幕有英文、簡體中文及繁體中文的格式,不過偶爾會發現出現的字幕是看不懂的文字。若不是翻譯品質的問題,別急著把字幕砍掉,透過幾個小步驟即可轉換為能夠正確顯示的字幕。 1. 打開Word2007,點選"開啟舊檔",將右下角的下拉選單選擇"所有檔案",即可看到.srt檔案。 2. 點選開啟之後,會出現一個選取文字編碼的對話框,選擇"其它編碼方式"中的" 簡體中文GB2312 "語系,預覽框即會出現正確的簡體文字。 3. 選擇工具列上的"校閱">"簡轉繁"功能,將簡體中文轉換為繁體中文。 4. 按Ctrl+A全選、再按Ctrl+C複製所有內容;關閉Word且不要存檔。此時會出現對話框詢問是否要保留複製的文字,按下"是"後離開Word。 5.將剛才的.srt檔案用記事本開啟,將所有的內容文字刪除,再按Ctrl+V將剛剛複製的內容貼上,覆蓋,存檔並關閉就OK了。 另一個快速將亂碼改為簡體中文的方法: 1. 將srt檔案用IE開啟 2. 開啟出來的畫面顯示出來的也是亂碼,接著按右鍵選擇"編碼",選取"簡體中文(GB2312)"的選項,會出現正確的簡體文字。 3.將網頁上的文字複製下來,再用記事本開啟.srt檔案,將原有的亂碼內容刪掉、並貼上剛剛複製的文字,存檔關閉,若有出現對話框,存檔類型選擇"所有檔案",編碼改為"Unicode",按下儲存就完成囉!