專家指導:Svn使用import作為工作拷貝
本節(jié)向大家介紹一下Svn import子命令使用情況,即Svn如何使用import目錄作為工作拷貝,主要包括前奏,需求分析和解決方案等內(nèi)容,在這里拿出來和大家分享一下,希望對大家有用。
前奏
svn作為一款極其優(yōu)秀的開源版本控制系統(tǒng),應用廣泛,從組織到個人遍及各行各業(yè)。因此學習和熟練掌握它,對提高我們?nèi)粘9ぷ餍屎蛿?shù)據(jù)安全非常重要,尤其對開發(fā)人員協(xié)同管理Project的文檔,代碼,各類圖等,能達到事半功倍的效果。不必再每天完成工作后,打包工程目錄,備份每天的版本;也不用幾個人堆在一起效率低下地手工合計代碼;也不用擔心偶爾因忘記打包,而丟失寶貴的數(shù)據(jù)資料。現(xiàn)在筆者已經(jīng)養(yǎng)成完全使用svn管理日常的一些小項目,即使是個人使用,因為實在是不想每次都打包了,然后找數(shù)據(jù)再去一堆壓縮包里去找。
svn有Win和Linux的版本,這里講的是后者,而且主要是命令行操作(不過通過命令行或者能更加理解svn的工作方式和原理),前者有烏龜這類圖形工具,雖功能不全,但操作也確實簡單。
需求分析
看一下Svn import子命令需求分析,為了避免手工管理一個我們?nèi)找孀兇蟮捻椖?,于是我們選擇svn,讓程序為我們自動控制版本并記錄下更改記錄。但每當使用import子命令將工程導入到svn時,我們遇到一個極其惡的問題:將本地的工程目錄全部提交上去之后,但是這個原始工程目錄卻不是工作拷貝,于是我還得把這個原始工作目錄刪掉,重新從版本庫中checkout出來一個拷貝。這太不爽了,暫且不論這個工程占多大磁盤空間,明明有這個工程,只是缺少版本控制信息,有必要就刪掉而重新檢出整個工程么。于是我在google再google,但始終沒有找到解決方法,后來了解到,svn本來就沒有考慮過這個問題,貌似就只能刪掉原始工程目錄,而重新從庫中檢出一個帶版本控制信息的一模一樣的工程。
Solution
下面我們看一下Svn import子命令的解決方案,可能是因為個人有某種強迫癥,偶還是一如繼往地尋找方法企圖解決這個問題,現(xiàn)在終于使用了一個小技巧搞定了,目前市場上還沒有見到過這種方法,完全自創(chuàng)哦。方法如下(依然以最經(jīng)典的helloworld工程為例):
1.cd進入helloworld工程所在目錄
2.遞歸導入工程到版本庫:svnimporthelloworldsvn://localhost/project-m"JustTestthisTrick."
3.執(zhí)行最關鍵的命令(參數(shù)--depth=empty是精髓,它只初始化版本控制信息,不檢出任何文件):svnco--depth=emptysvn://localhost/projecthelloworld
4.然后進入工程目錄:cdhelloworld
5.執(zhí)行命令:svnst然后顯示所有文件前全帶?號,因為此時這些文件還不在版本控制管轄范圍內(nèi)。
6.因此我們將它們?nèi)考尤耄簊vnadd*現(xiàn)在所有文件前全顯示為A標記,即為Add狀態(tài)。
7.為了與版本庫一致,執(zhí)行update命令(其實此時這些文件與現(xiàn)在版本庫中是一模一樣的,因為我們才剛剛提交完,沒有作任何更改,此舉是為了“騙過”svn):svnup*此時更新必然會有沖突,而且還是100%,程序提示“在“xxx”中發(fā)現(xiàn)沖突。選擇:(p)推遲,(mf)全用我的,(tf)全用他人的,(h)使用幫助以得到更多選項:”,這時我們一定要選“(mf)全用我的“,即輸入mf,否則我們前面的工作就沒有意義了。
8.這時再用如下命令:svnst,svnci
命令均無顯示,因為無狀態(tài)變化,現(xiàn)在這個原始工程已經(jīng)“轉(zhuǎn)變“成一個workcopy了?,F(xiàn)在開始工作吧^_^。Svn import子命令的使用情況在這就介紹完了,希望對你有所幫助。
【編輯推薦】
- 學習筆記:詳解客戶端Subversion命令行的使用一
- 學習筆記:詳解客戶端Subversion命令行的使用二
- 分類匯總:Linux下Subversion命令大揭秘 上篇
- 分類匯總:Linux下Subversion命令大揭秘 下篇
- Subversion新理念及安裝問題簡單剖析