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