SVN使用補遺-使用中應注意的問題

  1. .svn 隱藏文件夾保存着SVN當前同步文件夾的一些元信息,不要修改,也不要刪除 。 不過有時候被鎖定的時候,可以刪除這個文件夾中的lock文件以解鎖,但是這樣做有可能會造成同步錯誤。
  2. 添加文件的時候,需要在要添加的文件上點右鍵然後Add...,然後要想與服務器同步,還需要Commit提交。
  3. 提交失敗的時候,可以試着先更新一下,或者清理一下,然後再提交。
  4. 平時開發過各中,可以一個人(小組)創建一個開發分支,這樣每個人的文件同步不會跟其它人產生衝突。必要的時候可以進行分支合併。
  5. 如果刪除了.svn文件夾,造成一個子文件夾不能同步 ,可以再把這個文件夾checkout一下,這樣便可以重新恢復同步信息,自動建立.svn文件夾.
  6. Update是與服務器最新版本保持同步,如果本地版本比服務器版本舊,則更新本地文件爲服務器版本,如果本地版本比服務器版本更新,則不進行操作。
  7. Commit是提交本地的修改文件,本地文件修改後,或者通過Add添加了新文件,或者通過Delete刪除了文件,或者移動、複製了文件,都需要通過Commit提交來提交到服務器上。
  8. Revert如果要恢復到服務器上的最新版本(某個版本),使用Revert
  9. Update to version 是與服務器上的某個文件比較,如果服務器上的文件更新,則同步,否則不做操作。
  10. Get lock...和Release lock,是用來鎖定某些文件以阻止其它人改變的
  11. Patch,批處理,查文檔,它的大概意思是多人開發一個項目,可能有的人並沒有commit權限,於是它便可以生成Patch然後由有commit權限的用戶通過審覈後,再Apply patch,應用修改。
  12. Relocate 與Switch,前者是在改變URL/IP的時候使用,後者意思是改變目錄,比如切換到某個branch
  13. Resolve是用來解決衝突的。
  14. 如果已經有人lock了一個文件,但另外一個人需要編輯此文件,有兩個選擇,一個是由管理員來解除鎖定,另外一個是在get lock選項中有個steal the locks,選擇後,即可以編輯該文件
  15. SVN的版本概念是針對目錄而非文件,即使只更新了一個文件,那麼,整體的版本也需要加1
  16. 推薦使用目錄樹爲
    /repos/trunk     用來保存主線,所有的code都存放在這個目錄中
    /repos/branches  用來保存目錄分支,OEM、新功能、設計方案調整,都有可能需要創建分支目錄
    /repos/tags      用來保存標籤拷貝,文檔寶的階段性成果可以打個標籤存放到此目錄下
  17. SVN的上傳和更新是異步的,可以分開操作,而不用擔心在update的同時把自己不成熟的代碼commit從而影響別人的工作。
    SVN常用操作
    a、保持客戶端和服務器端的一致,從服務器上更新文件,update
    b、對客戶端文件的增、刪、改、剪切,add,delete,copy,move
    c、狀態比較 status,diff
    d、取消對服務器上文件的修改,revert
    e、合併別人的修改(後更新的人需要做這個操作)update,resolved
    f、客戶端修改的文件更新到服務器上,commit
  18. 查詢版本,不單單可以通過版本號查詢,也可以通過關鍵字和版本的日期來查詢   注意:如果給定時間的話,查詢時需要在希望的日期上加一,如要查詢2008-09-02的版本,應該使用2008-09-03,因爲你只給了日期而沒有給指定的時間點。
  19. 鎖定-修改-解鎖方案,拷貝-修改-合併方案使用的一般原則
       如果是圖像文件,一般使用鎖定-修改-解鎖方案,因爲兩個不同的版本沒法合併
       如果是文本文件,一般使用拷貝-修改-合併方案
  20. 鎖定文件可以所單個,也可以鎖多個,可以選擇一個文件夾,然後在列表中勾選。並且,這個鎖定是隨時都可以解除的,選擇unlock即可。
       注意:   如果一旦提交了更新,那麼所有的文件都將解鎖,即使有部分文件可能還沒有更新。 但是如果你在commit的時候,選擇keep locks,則文件還是被鎖定。
  21. 對客戶端的目錄或文件可以設置屬性,可以從下拉列表中選擇
        如svn:needs-lock,就是對指定的對象設置只讀權限,只有當該對象擁有鎖定的權限後,才能對文件進行編輯,這樣可以確定只有一個用戶在操作該文件,避免像圖像這樣的文件只能線形操作而導致另外一個人工作的浪費。
  22. 即使客戶端的文件test.doc被重命名了hello.rtf(使用svn重命名),但它的歷史紀錄仍然含有重命名以前的信息,並且可以將之前的版本給提取出來。即使再新建一個test.doc也不會有混淆。(查看歷史紀錄的時候需要把Stop on copy/rename這個選項的複選框的勾去掉)
  23. SVN的複製比較特殊,如果複製一個目錄,它其實並沒有完全複製目錄中的所有的文件,它只是建立一個目錄樹的入口,你可以把它理解爲一個快捷方式,即使當你的新目錄中的文件有了更改,它也只是更新你修改的文件,其他文件還是原文件夾的映射,沒有更改。
  24. 對主幹和分支上文件的修改互不影響。當完成了分支上所有工作,所有的分支修改可以被拷貝回到主幹。
  25. 對同名文件的合並可以先用svn diff查看文件的區別,然後通過svn merge功能來合併文件。
  26. 如果需要解決版本的衝突,會在本地目錄下產生同名的三個文件,初始的版本(在比較的左邊)、最終的版本(在比較的右邊)、接收區別的工作拷貝(合併的目標)。通過比較來手動合併版本,如果通過比較不需要將本地的修改合併到服務器上去,則使用revert回滾。
  27. 手工跟蹤合併:SVN並不能完全自動合併衝突,比較合適的方法是在版本提交的日誌信息中說明合併的特定版本號(或是版本號的範圍),這樣等到合併時可以運行svn log來查看分支包含了哪些修改。這樣可以幫助依序進行合併而不會進行多餘的合併。
  28. 預覽合併:當工作拷貝已經改變,合併會針對存在的那一個文件,這時運行revert不會恢復在本地的修改,兩部分的修改無法識別出來。解決這個問題的簡單的方法就是使用diff來預覽變化部分,通過顯示合併時的狀態信息,得到合併之後的“整體”預覽。
  29. svn diff和svn merge的區別:
  30.     將test.doc版本100重命名爲ceshi.doc,同時新建一個文件test.doc爲版本102。
        這樣區別就出來了:
        svn diff命令忽略祖先,diff命令只是單純地比較兩條路經下的兩個文件。
        svn merge是比較兩個對象,會注意到版本100和版本102的test.doc兩個文件是不關聯的。
  31. SVN並沒有真正意義上的重命名,move命令只是copy、delete兩個命令的組合。
  32. 找回刪除的項目:即使刪除了文件或目錄,SVN的信息從不丟失,只是從當前的HEAD版本消失了,但仍然存在於歷史的早期版本。只要通過SVN的log來查看所有改變的每個項目的版本,找出你刪除文件或目錄的那個版本。
  33. 將所有的開發代碼存放在trunk上。
        常用分支模式:
        a、發佈分支:在代碼發展到一定階段,建立發佈分支,將當前的一個版本取出來,拷貝到branches目錄下,進行全面嚴酷的測試,如發現BUG則在當前版本進行修復,並同步更新trunk中的BUG,經測試完成後,將文件拷貝到tags目錄中發佈,並提交給客戶。
        b、特性分支:如果需要作複雜的修改,會影響到trunk代碼的穩定性,則建議建立一個特性分支,等特性穩定之後,再和truck主幹合併
  34. 標籤TAG:它是某個項目,某個時間的一個快照,這個術語很常見,每次提交一個修訂版本其實都是一個精確的快照。
  35. SVN的數據存儲格式有Berkeley DB和FSFS。我們現在所使用的版本默認爲FSFS格式的數據存儲。
  36. SVN自帶工具
           (要使用這些工具可以在命令行模式下輸入svnadmin help、svnlook help等指令即可)
           Svnadmin:提供創建SVN版本庫的功能,還可以用來維護這些版本庫。
           Svnlook:用來查看版本庫中不同的修訂版本和事物(它不會改變版本的內容)。
           Svndumpfilter:可以簡單快速的作爲SVN版本庫歷史的以路經爲基礎的過濾器。
           Svnsync:將一個版本庫的歷史轉移到另外一個上。特點是可以遠程操作(“源”、“目標”版本庫以及svnsysnc程序可以在不同的計算機上使用。)
  37. SVN節約磁盤空間的主要方法:
    1、採用增量化技術,對兩組數據,只記錄其中的一組,另外一組只是存放與第一組有差別的部分。
    2、由於客戶端和服務器網絡異常,或客戶端svn進程異常中止,都可能導致文件提交的事務失敗,可以刪除意外中止的事務。可以使用$svnadmin lstxns myrepos來清除。
  38. 刪除不使用的Berkeley DB日誌文件
           Svnadmin list –unused –dblogs /path/to/repos
           Rm ‘svnadmin list –unused-dblogs /path/to/repos’

 

(部分蒐集於網絡,轉載請註明出處:http://blog.csdn.com/iijse

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章