1.把項目上傳到svn(import)
svn import -m "New Import" ./MyProject/ http://svn_server/ios/trunk/MyProject #將本地MyProject目錄下的所有文件提交到服務器/trunk/MyProject目錄
2.檢出代碼(checkout)
svn co http://svn_server/ios/trunk/MyProject #檢出最新版本到本地
svn co -r 版本號 http://svn_server/ios/trunk/MyProject #檢出指定版本到本地
3.往版本庫中添加新的文件(add)
svn add filename #添加指定文件
svn add * #添加所有文件
4.將改動的文件提交到服務器(commit)
svn ci -m "日志消息" #將該路徑下所有修改的文件提交到服務器
5.將服務器的代碼更新到本地(update)
svn up
6.創建分支(copy)
svn cp -m "create branch" http://svn_server/ios/trunk/MyProject http://svn_server/ios/branches/NewBranch #將主干MyProject拷貝一份到分支NewBranch
7.合并主干代碼到分支(merge)
cd NewBranch #切換到本地分支目錄
svn merge http://svn_server/ios/trunk/MyProject #將服務器主干代碼合并到本地
- 注:先將服務器上的主干代碼合并到本地分支;合并好并且確保本地分支運行沒問題后再講本地分支代碼提交到服務器
8.合并分支代碼到主干(merge)
cd MyProject #切換到本地主干目錄
svn merge http://svn_server/ios/branches/NewBranch #將服務器分支代碼合并到本地
9.創建tags(copy)
svn cp http://svn_server/ios/trunk/MyProject http://svn_server/ios/tags/tag-1.0 -m "create tag"
10.刪除分支或tags(delete、del、remove)
svn rm -m "rm branch" http://svn_server/ios/branches/NewBranch
svn rm -m "rm tag" http://svn_server/ios/tags/tag-1.0
11.沖突解決(resolve)
a. svn up
時如果有沖突發送svn通常會有以下提示(注意:“#”后面是我添加的注釋):
U Classes/Message/FriendsViewController.swift # U 該文件有修改
C Classes/AppDelegate.swift # C 該文件在更新時發生沖突
R Vendor/Web.bundle/index.html # R 這個文件預定要被替換
U Demo.xcodeproj/project.pbxproj # U 該文件有修改
--- Recording mergeinfo for merge of r709 through r730 into '.': # 記錄合并信息
U .
Summary of conflicts: # 沖突總結:
Text conflicts: 1 # 有1個文本沖突
Conflict discovered in file 'Classes/AppDelegate.swift'. # 文件“Classes/AppDelegate.swift”中發現沖突。
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge, # 選擇:(p)標記沖突,稍后解決,(df)把所有的修改列出來,(e)直接編輯沖突的文件,(m)合并(這個我目前還沒用過),
(mc) my side of conflict, (tc) their side of conflict, #(mc)沖突以本地為準,(tc)沖突以服務器為準 ,
(s) show all options: #(s)顯示其他可用的命令
b. 遇到沖突我們需要和那個與我發生沖突的哥們商量一番,所以需要推遲處理。選擇:p
終端輸出如下:
Summary of conflicts: # 沖突總結:
Text conflicts: 1 # 總共有1個文本沖突
c. 現在我們開始解決沖突,打開Classes/AppDelegate.swift
文件,找到沖突。(注意:“#”后面是我添加的注釋):
<<<<<<< .working # 我當前本地的版本(我把這個“友盟統計”的注釋給去掉了,因為他還有用。)
// 友盟統計
UMAnalyticsConfig.sharedInstance().appKey = "------"
MobClick.start(withConfigure: UMAnalyticsConfig.sharedInstance())
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
MobClick.setAppVersion(version)
}
||||||| .merge-left.r708 # 我修改之前的版本(以前這個“友盟統計”被注釋掉了)
// // 友盟統計
// UMAnalyticsConfig.sharedInstance().appKey = "------"
// MobClick.start(withConfigure: UMAnalyticsConfig.sharedInstance())
// if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
// MobClick.setAppVersion(version)
// }
======= # 另外一個哥們的修改版本(他覺得這個“友盟統計”被注釋掉了就沒用了,所以就給刪了。簡單粗暴??????)
>>>>>>> .merge-right.r730
經過討論這個“友盟統計”還是有用的,所以以我當前本地版本為準。修改如下:
// 友盟統計
UMAnalyticsConfig.sharedInstance().appKey = "------"
MobClick.start(withConfigure: UMAnalyticsConfig.sharedInstance())
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
MobClick.setAppVersion(version)
}
d. 沖突文件修改好了。在終端輸入svn st
命令查看下當前svn狀態:
leolideMacBook-Pro:Demo leo$ svn st
U Classes/Message/FriendsViewController.swift
C Classes/AppDelegate.swift
R Vendor/Web.bundle/index.html
U Demo.xcodeproj/project.pbxproj
? Demo.xcodeproj/project.xcworkspace/xcshareddata/Demo.xcscmblueprint
? Demo.xcodeproj/project.xcworkspace/xcuserdata/leoli.xcuserdatad
? Demo.xcodeproj/xcuserdata/leoli.xcuserdatad
leolideMacBook-Pro: Demo leo$
我們發現Classes/AppDelegate.swift
這個文件的標記還是沖突“C”
狀態。我們需要用resolve
命令去掉這個標記。命令如下:
leolideMacBook-Pro: Demo leo$ svn resolve --accept working Classes/AppDelegate.swift
Resolved conflicted state of 'Classes/AppDelegate.swift'
leolideMacBook-Pro: Demo leo$
再次查看svn狀態。Classes/AppDelegate.swift
的標記已經變成“M”
了。
leolideMacBook-Pro:Demo leo$ svn st
M Classes/Message/FriendsViewController.swift
M Classes/AppDelegate.swift
R Vendor/Web.bundle/index.html
M Demo.xcodeproj/project.pbxproj
? Demo.xcodeproj/project.xcworkspace/xcshareddata/Demo.xcscmblueprint
? Demo.xcodeproj/project.xcworkspace/xcuserdata/leoli.xcuserdatad
? Demo.xcodeproj/xcuserdata/leoli.xcuserdatad
leolideMacBook-Pro: Demo leo$
到此svn已經恢復正常狀態。我們可以進行commit
等操作了。
12.加鎖(lock)
svn lock -m "日志消息" test.h #給test.h文件加鎖
13.解鎖(unlock)
svn unlock test.h #給test.h文件解鎖
14.查看日志(log)
svn log test.h #顯示test.h文件的所有修改日志
15.查看文件詳細信息(info)
svn info test.h #查看test.h文件詳細信息
16.比較差異(diff)注:推薦使用xcode會更加清晰明了
svn di test.h #比較修改后的test.h文件與基礎版本的差異
svn di -r m:n test.h #比較版本m和版本n的差異
17.SVN幫助(help)
svn help
svn help ci #查詢ci命令的幫助
18.變更svn地址(switch)
svn switch --relocate http://old_svn_server http://new_svn_server