1.把項目上傳到svn(import)
svn import -m "New Import" ./MyProject/ http://svn_server/ios/trunk/MyProject #將本地MyProject目錄下的所有文件提交到服務(wù)器/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.將改動的文件提交到服務(wù)器(commit)
svn ci -m "日志消息" #將該路徑下所有修改的文件提交到服務(wù)器
5.將服務(wù)器的代碼更新到本地(update)
svn up
6.創(chuàng)建分支(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 #將服務(wù)器主干代碼合并到本地
- 注:先將服務(wù)器上的主干代碼合并到本地分支例隆;合并好并且確保本地分支運行沒問題后再講本地分支代碼提交到服務(wù)器
8.合并分支代碼到主干(merge)
cd MyProject #切換到本地主干目錄
svn merge http://svn_server/ios/branches/NewBranch #將服務(wù)器分支代碼合并到本地
9.創(chuàng)建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
時如果有沖突發(fā)送svn通常會有以下提示(注意:“#”后面是我添加的注釋):
U Classes/Message/FriendsViewController.swift # U 該文件有修改
C Classes/AppDelegate.swift # C 該文件在更新時發(fā)生沖突
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: # 沖突總結(jié):
Text conflicts: 1 # 有1個文本沖突
Conflict discovered in file 'Classes/AppDelegate.swift'. # 文件“Classes/AppDelegate.swift”中發(fā)現(xiàn)沖突收苏。
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)沖突以服務(wù)器為準 属划,
(s) show all options: #(s)顯示其他可用的命令
b. 遇到?jīng)_突我們需要和那個與我發(fā)生沖突的哥們商量一番恬叹,所以需要推遲處理。選擇:p
終端輸出如下:
Summary of conflicts: # 沖突總結(jié):
Text conflicts: 1 # 總共有1個文本沖突
c. 現(xiàn)在我們開始解決沖突同眯,打開Classes/AppDelegate.swift
文件绽昼,找到?jīng)_突。(注意:“#”后面是我添加的注釋):
<<<<<<< .working # 我當前本地的版本(我把這個“友盟統(tǒng)計”的注釋給去掉了须蜗,因為他還有用硅确。)
// 友盟統(tǒng)計
UMAnalyticsConfig.sharedInstance().appKey = "------"
MobClick.start(withConfigure: UMAnalyticsConfig.sharedInstance())
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
MobClick.setAppVersion(version)
}
||||||| .merge-left.r708 # 我修改之前的版本(以前這個“友盟統(tǒng)計”被注釋掉了)
// // 友盟統(tǒng)計
// UMAnalyticsConfig.sharedInstance().appKey = "------"
// MobClick.start(withConfigure: UMAnalyticsConfig.sharedInstance())
// if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
// MobClick.setAppVersion(version)
// }
======= # 另外一個哥們的修改版本(他覺得這個“友盟統(tǒng)計”被注釋掉了就沒用了,所以就給刪了明肮。簡單粗暴??????)
>>>>>>> .merge-right.r730
經(jīng)過討論這個“友盟統(tǒng)計”還是有用的菱农,所以以我當前本地版本為準。修改如下:
// 友盟統(tǒng)計
UMAnalyticsConfig.sharedInstance().appKey = "------"
MobClick.start(withConfigure: UMAnalyticsConfig.sharedInstance())
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
MobClick.setAppVersion(version)
}
d. 沖突文件修改好了柿估。在終端輸入svn st
命令查看下當前svn狀態(tài):
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$
我們發(fā)現(xiàn)Classes/AppDelegate.swift
這個文件的標記還是沖突“C”
狀態(tài)循未。我們需要用resolve
命令去掉這個標記。命令如下:
leolideMacBook-Pro: Demo leo$ svn resolve --accept working Classes/AppDelegate.swift
Resolved conflicted state of 'Classes/AppDelegate.swift'
leolideMacBook-Pro: Demo leo$
再次查看svn狀態(tài)秫舌。Classes/AppDelegate.swift
的標記已經(jīng)變成“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已經(jīng)恢復正常狀態(tài)。我們可以進行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文件與基礎(chǔ)版本的差異
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