初學svn

初學svn

從git轉svn真是很不願意,但是沒辦法公司代碼用svn管理的。以下是我個人對SVN的理解,可能不對的地方會有很多,請指正我們一起學習。

SVN簡介

SVN是一個集中式的代碼管理工具,這裏有SVN教程可參考學習。

基礎操作

檢出

相當於git上的克隆遠程代碼到本地

svn checkout https://svn.xxx.com:8443/svn/xxx/xxx/ --username=xxx --password=xxx /Users/xx/Documents/xxx/xxx 

svn checkout https://host地址/克隆目錄地址 --username=用戶名 --password=密碼 本地存儲路徑

檢出的時候還可以指定目錄檢出,分級檢出。

提交更改過的代碼到服務器

svn status
svn add new.txt
svn commit –m ‘commit’

更新服務器端的代碼到本地

svn update

學習筆記

工作流程

日常開發過程其實就是這樣的(假設你已經Checkout並且已經工作了幾天):Update(獲得最新的代碼) -->作出自己的修改並調試成功 --> Commit(大家就可以看到你的修改了) 。

典型的工作週期是這樣的:

  • 更新工作拷貝

      svn update
    
  • 做出修改

      svn add
      
      svn delete
      
      svn copy
      
      svn move
    
  • 檢驗修改

      svn status
      
      svn resolved
    
  • 提交修改

      svn commit
    

關於衝突

如果兩個程序員同時修改了同一個文件呢, SVN 可以合併這兩個程序員的改動,實際上SVN管理源代碼是以行爲單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合併兩種修改。如果是同一行,SVN 會提示文件 Conflict, 衝突,需要手動確認。

解決衝突後需要用

svn resolved xxx.m

這樣SVN就知道這個文件不是衝突文件了,會將原來的衝突文件刪除保存這個文件。

svn resolved xxx.m

svn commit -m "..."

關於更新版本庫

顧名思義,update 操作是用來更新版本庫的。這個操作將工作副本與版本庫進行同步。由於版本庫是由整個團隊共用的,當其他人提交了他們的改動之後,你的工作副本就會過期。

讓我們假設 Tom 和 Jerry 是一個項目的兩個開發者。他們同時從版本庫中檢出了最新的版本並開始工作。此時,工作副本是與版本庫完全同步的。然後,Jerry 很高效的完成了他的工作並提交了更改到版本庫中。

此時 Tom 的工作副本就過期了。更新操作將會從版本庫中拉取 Jerry 的最新改動並將 Tom 的工作副本進行更新。

關於複查

在 commit 操作之前複查下你的修改是一個很好的習慣。

svn status 查看所有變更的文件列表

svn diff XXX.m 查看某文件的變更記錄

Revert 操作

Revert 操作重置了對工作副本的修改。它可以重置一個或多個文件/目錄。當然它也可以重置整個工作副本。在這種情況下,revert 操作將會銷燬待變更列表並將工作副本恢復到原始狀態。

svn revert xxx.m

svn status時,發現將不該修改的文件修改了,可以通過revert撤回修改

當不小心刪除了某個文件時,可以通過svn revert撤回。

回到過去

svn checkout --version 1792 # xxx

回去之後怎麼切換回來呢?

關於分支

以下是個人關於SVN分支、合作開發的理解

trunk和branches的存在是合理的,甚至還應該有一個tags專門存儲每次的上線版本,trunk是版本主線,branches存放暫存的開發分支。各個開發先在branches創建一個文件夾,作爲自己的分支branch-mx,然後從trunk讓拷貝一份最新的代碼到branch-mx裏,在這裏修改,修改完後將自己的修改合併到trunk上去。

主目錄
|
|-- trunk
|
|-- branches
|
|-- branch-ZhangSan
|
|-- branch-LiSi

  • 怎麼創建分支?

直接對兩個目錄進行copy

svn copy -m "Creating a personal branch of ZhangSan" http://svn.example.com/resp/iOS/trunk http://svn.example.com/resp/iOS/branches/branch-zhangsan 

創建完分支後,checkout 到自己的分支上開發。

svn checkout http://svn.example.com/resp/iOS/branches/branch-zhangsan
  • 怎麼合併分支?

      //切到主目錄
      cd ../iOS/trunk/
      
      //更新主線
      svn update
      		
      //將自己分支的修改合併到主線
      svn merge --reintegrate http://svn.example.com/resp/iOS/branches/branch-zhangsan
      
      //查看合併
      svn status / svn diff / ...
      
      //提交合並
      svn commit -m "..."
    

注意:以下這個步驟是我個人理解,我也不清楚對不對,網友們有說需要將自己的分支刪除,那豈不是每次開發前需要重新創建了,很麻煩。

分支合併到主幹後,再次開發前需要將自己分支上的內容更新到最新,然後再開始開發

	//進入主trunk目錄
	cd ../iOS/branches/branch-zhangsan/
	
	//將主目錄的文件merge到自己的分支
	svn merge --reintegrate http://svn.example.com/resp/iOS/trunk/

切換分支命令

svn switch http://svn.example.com/resp/iOS/branches/branch-zhangsan

查看分支詳情

svn info

參考

推薦閱讀

這個需要從頭到尾看完
SVN菜鳥教程

這看至少前面的幾章需要看完
SVN使用教程

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