10. SVN 版本控制

Download Report

Transcript 10. SVN 版本控制

IDIC
版本控制軟體 SVN
圑隊開發
•
圑隊開發通常會共用同一份程式,很有可
能被很多人同時修改,所以會有以下問題
• 檔案被覆蓋
• 例如:王小明跟李小華改同一份程式,但彼此
都不知道都有改,就自行上傳至共同開發的伺
服器。
• 檔案被誤刪
• 例如:王小明刪除了開發伺服器中重要的套件。
• 就會導致同一份程式不能被不同人修改。
版本控管系統-Subversion
可以依時間記錄檔案修改的內容
• 運用版本控制的觀念
•
• 檔案的修改都會用版本去做記錄
• 萬一發生檔案被覆或誤刪時,可找回之前的
版本還原
•
利用複製-修改-合併的方式解決多人開發
同一個檔案的問題
• 版本控管系統在這裡我們用目前使用的是
Subversion, SVN
SVN 的架構
• 版本控管系統通常
會有一個集中的檔
案庫我們叫做
Repository
• 所有的程式碼都會
儲放在檔案庫中。
• 開發人員修改的檔
案會放在本機,需
要使用 SVN 客戶
端工具把檔案傳到
檔案庫中。
一般檔案系統
•
不同人修改相同檔案,會被覆蓋的問題
SVN - 鎖定-修改-解鎖
•
避免發生檔案覆蓋情形的解決方法
SVN - 鎖定-修改-解鎖缺點
•
當有人鎖定檔案的時候,別人就無法存取
那個檔案。
•
當有人忘記解鎖的時候,就變成沒有人可以修改。
SVN - 複製-修改-合併
•
避免檔案忘記解鎖導致無法修改的方法
SVN - 複製-修改-合併(續)
•
避免檔案忘記解鎖導致無法修改的方法
每次修改程式需要做的事
1. 取得檔案庫的檔案(Checkout)
2. 依開發需要, 變更檔案(Add, Delete, …)
3. 看目前什麼檔案有變更(Diff)
4. 更新目前的工作複本(Update)
• 更新是用來檢查是否有別人修改同一份檔案
5. 解決發生衝突的一些檔案(Resolve Conflict)
• 當電腦無法判斷如何合併別人修改的檔案,就必需人工做合併。
6. 將檔案送交到檔案庫中(Commit)
• 必需將修改的內容說明放置(Commit Message)
Subversion-運作流程
版本控制系統-關鍵字說明
•
工作複本(Working Copy)
• 允許使用者在本機端修改檔案庫中的檔案
• 使用者可將本機端變更的檔案分享給其他人
• 每個目錄都會有 .svn 的子目錄不允許刪除
•
版本(Revision)
• 代表檔案庫的某一次修改的內容
• 做為檔案還原、比較、追蹤的依據
• HEAD 表示最新版本
SVN 客戶端
• 預設的SVN客戶端是透過指令的方式操
作,另外一種就是圖型化的介面,目前
我們使用的是
• 下載位置:
http://tortoisesvn.net/downloads.html
• 教育訓練-測試用檔案庫
•
http://203.64.105.131/svn/idic_training
• 帳號/密碼 學號/學號
TortoiseSVN – 操作介面
• 安裝後,於電腦桌面按右鍵就可以操作
SVN。
TortoiseSVN – 操作指令步驟
1. 取得檔案庫的檔案(Checkout)
2. 依開發需要, 變更檔案(Add, Delete, …)
3. 看目前什麼檔案有變更(Diff)
4. 更新目前的工作複本(Update)
• 更新是用來檢查是否有別人修改同一份檔案
5. 解決發生衝突的一些檔案(Resolve Conflict)
• 當電腦無法判斷如何合併別人修改的檔案,就必需人工做合併。
6. 將檔案送交到檔案庫中(Commit)
• 必需將修改的內容說明放置(Commit Message)
TortoiseSVN – 操作介面(續)
• 當本機端的資料具有 SVN 的存取權時,
會以不同圖示標示目前資料夾或檔案的狀
態
使用 SVN 注意事項
•
請勿刪除 .svn/ 檔, 否則 SVN 無法正常取得檔案的
修正資訊
•
每次開發的第一件事, 就是 Update 全部的資料夾
•
每次 Commit 必需填寫修改記錄至 Commit message
•
請勿將 .tmp 的檔案上傳至檔案庫, 否則會導致資料
庫無法正常存取資料
•
所有的 SVN 檔案, 發生衝突(Conflicts)時, 務必
先用 Edit Conflicts 解決衝突
練習1
• 新增檔案至 Repository
• 建立資料夾,名稱用學號。
• 在資料夾建立一個文字檔,名稱用學號
練習2
• 修改檔案至 Repository
• 於學號.txt 填入 “hello world” 內容
練習3
• 刪除檔案至 Repository
• 將自已學號的資料夾從 Repository 移除
常見問題修改同一份程式碼發生衝突
(Conflict)
•
SVN client提供以下三種資訊做為解決的參考
• filename.mine :表示你自已修改的檔案
• filename.r舊版號:表示未修改前的檔案內容
• Filename.r新版號:表示檔案庫中最新的檔案內容
TortoiseSVN- Commit 的衝突訊息
TortoiseSVN- 解決衝突
• “手動” 合併發生衝突
編緝衝突
確認衝突已修正
TortoiseSVN- 常見問題情境1-解決方
式1 (步驟3)
•
透過 Edit conflicts 編緝完後, 點選上角工
具列的三角形勾勾。
•
確認程式碼是否皆正確,而且可執行
•
最後再 Commit 即完成
TortoiseSVN- 常見問題Tree Conflict
當檔案被刪除,其他人不知道又修改了檔案要
Commit 到 Repository 就會發生此種衝突
TortoiseSVN- Commit 衝突訊息
TortoiseSVN- 檔案被誤刪的處理方式
• “手動” Edit Conflicts 編緝衝突
TortoiseSVN-檔案被誤刪的處理方式
•
需由開發人員判斷要保留哪份檔案
• 是要刪除檔案( Remove the file)
• 還是要保留本機的檔案(Keep the local file)
TortoiseSVN- 常見問題
還原檔案
•
SVN 提供以下三種解法
• 未 Commit
• Revert
• 將修改內容還原成未修改的內容
• 已 Commit
• show_log > Revert to this revision
• 還原至某個版本
• show_log > Revert changes from this revison
• 將某版本的修改內容移除
TortoiseSVN- Revert to this
revision
•
情境
TortoiseSVN- Revert to this
revision
•
步驟1
TortoiseSVN- Revert to this
revision
•
步驟2
TortoiseSVN- Revert to this
revision
•
步驟3
TortoiseSVN- Revert to this
revision
•
步驟4
• 將還原後的檔案做 commit 送交到 檔案庫中
TortoiseSVN- Revert changes from
this revison
•
情境
正常版本
TortoiseSVN- Revert changes from
this revison
•
步驟1
TortoiseSVN- Revert changes from
this revison
•
步驟2
TortoiseSVN- Revert changes from
this revison
•
步驟3
TortoiseSVN- Revert changes from
this revison
•
步驟4
• 將還原後的檔案做 commit 送交到 檔案庫中