這些工具就叫作version control system
之前用過VSS (Visual SourceSafe)
這次使用的是SVN (Apache Subversion)
常見的CVS (Concurrent Versions System)也是這樣的工具。SVN最初的構想即是發展成一個可取代CVS的version control system,而且是FREE的。
版本控制的立意滿好理解的。
不外乎就是因為人多手雜,因此需要有一人、一個地方、或在這裡可以說是一樣工具,去管理這樣的場面,避免發生慘絕人寰的命案。
首先先了解你是在Trunk還是在Branch?
雖然聽說Alice's adventure in Wonderland裡的精靈曾經告訴Alice說「如果妳不知道妳要去哪裡,那麼現在你在哪裡一點都不重要。」我還是覺得若能更清楚現在的情況,還是對將要去哪裡有
幫助的。
Trunk //主幹,也就是你這堆東西develope的主幹
Branches //分支,從主幹而來的,可能加上或砍掉一
些東西,另外修改了某些功能
svn copy http://svnserver/calc/trunk http://svnserver/calc/branches/my-calc-branch -m 'create a branch'
另外,可利用Tag來保存Release的史料
事情的發展上基本上是這樣:
Svnadmin create //SVN manager set Reposity,並在這裡設置使用者帳密、權限
SVN import //import專案資料夾進Reposity,主要用意在建立結構
svn import project_directory http://DOMAIN/svn_project
svn import project_directory file:///SVN_PATH/svn_project
Svn checkout(co) //check out the source you need from Reposity
svn co http://SVN_PATH/svn_project
svn co file:///SVN_PATH/svn_project
svn co -r 7 file:///var/lib/svn/dev/projects //指要第七版
Svn update(up) //確保自己working base端source的更新正確性
SVN_CHECKOUT_DIR$ svn up
svn add
SVN_CHECKOUT_DIR$ svn add filename 或 svn add directory
svn delete
svn copy
svn move
Svn status(st) //查看己方檔案/結構 跟線上SVN的差異
SVN_CHECKOUT_DIR$ svn st
Svn diff //查看檔案內容跟線上SVN的差異
svn diff # //compare with previous version
svn diff -r9237:9238 //compare with pointed version
Svn commit(ci) //覆蓋回SVN上現在的版本,版本更新
SVN_CHECKOUT_DIR$ svn ci
Svn revert //還原到SVN上最新的版本
SVN_CHECKOUT_DIR$ svn revert [file | directory]
Conflict
進行以上動作時,難免會遇到Conflict(衝突),也就是可能有兩人(以上)同時對檔進行修改,而SVN並無法決定該更新哪一部份,這時就得靠人把這些檔案做一個確定性的合併(Merge),繳回(Commit)統一後的版本給線上SVN。
處理Merge這樣的工作你可以使用多種Merge的工具去處理,必須注意的是,這樣的情形必須「用 resolved 將自動產生的檔案刪除, 才能正常 commit」
svn resolved filename //刪除自動產生的diff檔案
ex: .r9366, .r9367, .mine
其他command,詳細可參考這裡
另外,請注意由於你使用的SVN可能是來自於非Subversion所release的工具,因此還是得去下載CollabNet Subversion(建議)。比如當你發現你的電腦告訴你svn並非你的內部或外部指令時..(這當然就是抓command line那個啦~)
以上內容參考自