SVN命令解析以及問題解決(update...)

仇諾伊發表於2017-12-13

SVN常用指令

1.Repo-browser(瀏覽版本庫) 通過“瀏覽版本庫”可以直接檢視伺服器上指定目錄下的所有目錄結構(需要有相關許可權),包括特定版本的作者,提交時間等,並且在瀏覽版本庫裡面連結了很多SVN常用的功能。如顯示日誌,檢出,匯出,檢入檔案/資料夾,改名,刪除檔案,分支建立等。

2.Checkout(檢出) 從SVN伺服器上得到資料,即建立本地副本,並且修改後可以commit到SVN伺服器上。相對於CC來說,SVN的checkout可以說完成了建立本地檢視和checkout兩個動作。checkout命令可以在本地計算機上,瀏覽版本庫,顯示日誌等多個地方找到。

3.Update(更新) 更新本地副本,得到SVN伺服器上最新的資料。一般check out建立本地副本後,都在該本地副本上修改提交,若想再次得到伺服器上的最新版本,即需用Update。在修改之前,一般我們都需要執行Update動作,以保證在最新版本上做修改,以減少提交時衝突。特別是用鎖定的模式開發,修改前必須先更新並獲得鎖後才能修改(後面會具體描述)提交。

4.Commit(提交) 提交修改到SVN伺服器上。所有需提交到SVN伺服器上本地副本的修改都需要用Commit命令完成。

Checkout和export區別

check out跟check in對應,export跟import對應。 check out匯出獲得檔案後,匯出的檔案仍處於SVN版本控制中,與版本庫保持關聯,比如你可以進行Svn Update或者Svn Commit操作。同時匯出資料夾下有一個.svn的隱藏資料夾,儲存著一些版本的後設資料資訊。

export 簡單匯出一個版本的資料,匯出的檔案脫離SVN版本控制,修改後無進行Update和Commit操作。匯出資料夾下沒有.svn目錄。

詳細命令

  • show log :檢視SVN上當前程式碼庫的最新版本號是多少.開啟右鍵看到一系列版本更新歷史,最上面的那一行,即是最新版本號,所謂的 head revision.顯示為粗體 的那一行即你本地當前的版本
  • TortoiseSVN—Repo-browser:

開啟你要比較的兩個版本所在的地址,選擇一個版本做為比較的基礎(單擊右鍵—選擇mark for comparison),再選擇另外一個版本(單擊右鍵—選擇show difference as unified diff),然後就會生成一個兩個版本的不同之處的文字

通過“瀏覽版本庫”可以直接檢視伺服器上指定目錄下的所有目錄結構(需要有相關許可權),包括特定版本的作者,提交時間等,並且在瀏覽版本庫裡面連結了很多SVN常用的功能。如顯示日誌,檢出,匯出,檢入檔案/資料夾,改名,刪除檔案,分支建立等

  • check for modification:檢查更新,可以檢查哪些檔案做了修改。在這些做了修改的檔案上單擊右鍵可以進一步的操作。

  • Revision Graph:版本分支圖

版本分支圖主要顯示以下內容:

 1.建立分支和標籤的時間和版本

 2.資料夾名稱的修改
 
 3.最新的版本
 
 4.本地副本的版本
複製程式碼

另外滑鼠滑過任意版本框,都會顯示該版本的日期、作者和備註資訊等;選中版本框按右鍵可以使用另外很多的功能,如顯示日誌,合併版本等等;還可通過“CTRL+左鍵”選中兩個版本進行比較等。

  • Resolve

  • update to revision: 更新版本可以使本地副本更新到任意一個歷史版本,方便使用者詳細檢視某一版本的具體內容。(更新後本地副本僅作為顯示某一版本內容,不能復原為該版本,與復原命令不同)

  • Revert: 本地副本還原, 放棄本地副本的修改,將其還原到本地修改前的版本(最後提交或者更新的版本)

還原至某一歷史版本(Revert to this revision)將本地副本復原到選中的某一個歷史版本,若需將該復原版本提交到伺服器上,則還需Commit!

還原某一歷史版本的修改(Revert changes from this revision)放棄某一歷史版本的修改。該動作只還原某一個特定版本的修改,並不還原該版本之前所有版本的修改,若需將該復原版本提交到伺服器上,則還需Commit!

  • Clean up:

  • get lock:獲取鎖定,在加鎖原因中加入備註,其他人可以瀏覽版本庫/日誌裡面看到新增的資訊,包括誰,什麼時間,為什麼鎖定等

  • Release lock:解除鎖定,修改完檔案並提交後,需及時的解鎖,這樣其他人才可以獲取鎖定,既而修改檔案。

  • Branch/Tag:

分支用途

1.軟體開發時以主幹為基礎,實現並行開發,不斷將分支上的修改合併到主幹上。
2.同一軟體的釋出版本BUG修改和升版的並行開發等。
複製程式碼

建立分支

命令1:Branches/Tags(工作副本使用)
命令2:copy to(瀏覽版本庫使用)
命令3:Create branche/tag form this revision(show log使用)
複製程式碼
  • Switch:

  • Merge:合併

  • Export:匯出,有時只想需得到配置庫的某些資料,但不想受SVN版本控制,此時可以用Exprot。 Exprot與check out一樣都是從伺服器中得到資料資料,但是Exprot的資料資料不受版本的控制,無.SVN資料夾。

  • Add:新增

  • Create Patch:

  • Apply Patch:

  • Properties:

  • setting:設定

  • help:幫助

  • about:關於SVN

  • relocate:重新定位,當URL修改(伺服器搬遷IP地址修改等),但本地副本還需繼續使用,則需重新定位URL,將先前checkout時的URL重新定位為最新的URL。

圖示

圖示意思

常見錯誤

1.SVN修訂號不連續

原因:SVN修訂號是相對於整個配置庫的,更新時看到的版本也是整個配置庫的修訂號,並不是某一個目錄的修訂號。

解決方法:無,SVN特色。

2.修改工作副本後,提交時提示“Resource out of date”,提交失敗。

原因:工作副本不是最新版本,提交失敗。

解決方法:先更新後再提交,遇衝突時解決衝突後再提交。

3.提示400錯誤

原因:操作者某些操作不準確,引起混亂,可能屬於SVN客戶端本身的bug

解決方法:暫時無很好的解決方法。

4.提示403錯誤

原因:不能進行該操作。比如URL不對;未開通該目錄相關許可權;使用者名稱密碼不對等。

解決方法:檢查操作對應的URL是否正確,是否有許可權,輸入的使用者名稱和密碼是否正確等,根據錯誤解決問題。

5.提示需“清理(clean up)”

原因:伺服器問題,一個SVN指令不能成功地完成,你的工作副本因此被滯留在一個不一致的狀態。

解決方法:在上一層目錄執行清理動作(clean up),若執行不成功,根據錯誤提示,刪除引起不能清理的資料夾,然後update。

6.不能正常檢出,提示URL過長

原因:目錄過深,即URL過長,SVN客戶端的bug,目前發現V1.5.3版本存在該問題。

解決方法:在上一層目錄檢出,或許更換SVN客戶端安裝版本,同時注意建立配置庫目錄時不易建立過深的目錄。

7.本地副本不能刪除,提示text-base過長

原因:目錄過深。

解決方法:修改目錄的名字,縮短工作副本目錄名字。

8.刪除/重新命名/移動/拷貝檔案,提交後,伺服器上與預期結果不一致

可能原因:使用WINDOWS刪除或者重新命名/移動命令進行操作. SVN有專有的Delete/Rename/move/copy命令,對於WINDOWS命令不能識別,使用WINDOWS命令會出現混亂。

解決方法:還原到前一版本,重新使用SVN自身Delete/Rename/move/copy命令。

9.將所有修改都提交後紅色感嘆號不消失

原因:頁面重新整理比較慢。

解決方法:重新整理頁面或者重啟電腦。

10.使用比較功能時,提示“* is not a valid text file”!**

原因:不可編輯的檔案不能比較具體的內容。

解決方法:暫時無。

11.能執行歷史版本的日誌資訊修改動作,但是“ok”確定卻不成功,提示出錯

原因:SVN預設狀態下不允許修改日誌資訊。

解決方法:在SVN上伺服器上增加 pre-revprop-change hook.但不建議使用

12.受版本控制的檔案,顯示”奇怪的“符號,如灰色的勾勾等

原因:SVN的特色圖示過載:處於不同的狀態,顯示不同的圖示。

解決方法:可以通過TortoiserSVN-Setting中的Icon Set中檢視各個圖示表示的狀態。

13.域帳戶密碼修改後,SVN的命令不能成功執行

原因:密碼錯誤,先前使用SVN命令時儲存了認證資訊,所以SVN命令的不能執行成功。

解決方法:在桌面上按右鍵,選擇Setting命令,進入Save date,將認證資訊這一項clear掉。這樣重新執行所需的SVN命令,即會出現讓您輸入使用者名稱和密碼。

相關文章