430 likes | 717 Views
IDIC. 版本控制軟體 svn . 圑隊開發. 圑隊開發通常會共用同一份程式,很有可能被很多人同時修改,所以會有以下問題 檔案被覆蓋 例如:王小明跟李小華改同一份程式,但彼此都不知道都有改,就自行上傳至共同開發的伺服器。 檔案被誤刪 例如:王小明刪除了開發伺服器中重要的套件。 就會導致同一份程式不能被不同人修改。. 版本控管系統-Subversion. 可以依時間記錄檔案修改的內容 運用版本控制的觀念 檔案的修改都會用版本去做記錄 萬一發生檔案被覆或誤刪時,可找回之前的版本還原 利用複製-修改-合併的方式解決多人開發同一個檔案的問題
E N D
IDIC 版本控制軟體 svn
圑隊開發 • 圑隊開發通常會共用同一份程式,很有可能被很多人同時修改,所以會有以下問題 • 檔案被覆蓋 • 例如:王小明跟李小華改同一份程式,但彼此都不知道都有改,就自行上傳至共同開發的伺服器。 • 檔案被誤刪 • 例如:王小明刪除了開發伺服器中重要的套件。 • 就會導致同一份程式不能被不同人修改。
版本控管系統-Subversion • 可以依時間記錄檔案修改的內容 • 運用版本控制的觀念 • 檔案的修改都會用版本去做記錄 • 萬一發生檔案被覆或誤刪時,可找回之前的版本還原 • 利用複製-修改-合併的方式解決多人開發同一個檔案的問題 • 版本控管系統在這裡我們用目前使用的是 Subversion, SVN
SVN 的架構 • 版本控管系統通常會有一個集中的檔案庫我們叫做 Repository • 所有的程式碼都會儲放在檔案庫中。 • 開發人員修改的檔案會放在本機,需要使用 SVN 客戶端工具把檔案傳到檔案庫中。
一般檔案系統 • 不同人修改相同檔案,會被覆蓋的問題
SVN - 鎖定-修改-解鎖 • 避免發生檔案覆蓋情形的解決方法
SVN - 鎖定-修改-解鎖缺點 • 當有人鎖定檔案的時候,別人就無法存取那個檔案。 • 當有人忘記解鎖的時候,就變成沒有人可以修改。
SVN - 複製-修改-合併 • 避免檔案忘記解鎖導致無法修改的方法
SVN - 複製-修改-合併(續) • 避免檔案忘記解鎖導致無法修改的方法
每次修改程式需要做的事 • 取得檔案庫的檔案(Checkout) • 依開發需要, 變更檔案(Add, Delete, …) • 看目前什麼檔案有變更(Diff) • 更新目前的工作複本(Update) • 更新是用來檢查是否有別人修改同一份檔案 • 解決發生衝突的一些檔案(Resolve Conflict) • 當電腦無法判斷如何合併別人修改的檔案,就必需人工做合併。 • 將檔案送交到檔案庫中(Commit) • 必需將修改的內容說明放置(Commit Message)
版本控制系統-關鍵字說明 • 工作複本(Working Copy) • 允許使用者在本機端修改檔案庫中的檔案 • 使用者可將本機端變更的檔案分享給其他人 • 每個目錄都會有 .svn 的子目錄不允許刪除 • 版本(Revision) • 代表檔案庫的某一次修改的內容 • 做為檔案還原、比較、追蹤的依據 • HEAD 表示最新版本
SVN 客戶端 • 預設的SVN客戶端是透過指令的方式操作,另外一種就是圖型化的介面,目前我們使用的是 • 下載位置: http://tortoisesvn.net/downloads.html • 教育訓練-測試用檔案庫 • http://203.64.105.131/svn/idic_training • 帳號/密碼 學號/學號
TortoiseSVN – 操作介面 • 安裝後,於電腦桌面按右鍵就可以操作 SVN。
TortoiseSVN – 操作指令步驟 • 取得檔案庫的檔案(Checkout) • 依開發需要, 變更檔案(Add, Delete, …) • 看目前什麼檔案有變更(Diff) • 更新目前的工作複本(Update) • 更新是用來檢查是否有別人修改同一份檔案 • 解決發生衝突的一些檔案(Resolve Conflict) • 當電腦無法判斷如何合併別人修改的檔案,就必需人工做合併。 • 將檔案送交到檔案庫中(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- 解決衝突 • “手動” 合併發生衝突
TortoiseSVN- 常見問題情境1-解決方式1 (步驟3) • 透過 Edit conflicts 編緝完後, 點選上角工具列的三角形勾勾。 • 確認程式碼是否皆正確,而且可執行 • 最後再 Commit 即完成
TortoiseSVN- 常見問題Tree Conflict 當檔案被刪除,其他人不知道又修改了檔案要 Commit 到 Repository 就會發生此種衝突
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 • 步驟4 • 將還原後的檔案做 commit 送交到 檔案庫中
TortoiseSVN- Revert changes from this revison • 步驟4 • 將還原後的檔案做 commit 送交到 檔案庫中