SVN 实用命令快速学习总结
本文总结了完成一个需求开发所需知道的SVN基本指令。
阅读本文前,推荐先参考米扑博客:SVN 常用命令
一般开发流程
- 获取代码(更新代码): svn co master
- 新建分支:svn co master branch
- 查看分支:svn status branch
- 提交分支(解决冲突): svn ci -m "log message"
- 合并分支到主干: svn merge branch master
- 删除分支:svn rm branch
各环节SVN基本命令
1、获取代码(更新代码)
第一次从仓库里获取代码
$ svn checkout [your_repository_url] 或者 $ svn co [your_repository_url]
如果已有本地代码,则需要更新代码,确保在最新代码上开发
$ cd [your_local_codes_path] $ svn update 或者 $ svn up
2、新建分支
SVN仓库中,trunk主干一般存放开发中的最新线上代码,因此不应该在主干下修改代码。
合理的做法是:从trunk主干拉出一个feature开发分支,然后在该feature分支下修改代码,直到测试通过后把分支feature合并到trunk主干。
建立分支
$ svn copy [your_trunk_url] [your_feature_branch_url] -m [your_log] // -m 填写建立分支的日志
切换分支
从trunk分支切换到feature分支
$ svn switch [your_feature_branch_url]
3、查看分支
切换分支后就可以进行代码修改。修改一段时间后,如果想了解当前分支文件的状态,可以通过以下命令:
$ svn status
该命令显示的格式为:状态 文件,常见的状态有:
字符 | 状态 | 说明 |
---|---|---|
A | 添加 | 与上一版相比增加的文件 |
C | 冲突 | 该文件冲突 |
D | 删除 | 该文件已从仓库删除,以后SVN不再跟踪版本 |
M | 修改 | 该文件被修改过 |
S | 处于其他分支 | 当前分支的子路径处于其他分支 |
? | 未纳入版本管理 | 通常是新增文件,SVN还没跟踪该文件的版本。可以使用svn add 把文件加入SVN,此时再运行svn status 时,文件的状态就显示为A |
! | 文件缺失 | SVN找不到该文件。一般出现在没有使用SVN命令删除文件的情况。当需要从仓库删除某文件时,应该使用svn delete ,这样文件的状态就变为D,提交以后该文件的版本就不再被跟踪 |
4、提交分支 (解决冲突)
开发完成后向远程分支提交代码
$ svn commit -m [your_log]
一般情况下代码就提交到远程分支了,但是如果有人和你修改了同一段代码,并且先提交到了远程分支,就会导致本次提交失败,此时需要先解决冲突再提交代码。
解决冲突
更新代码,显示冲突
$ svn update $ Conflict discovered in [your file] Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tf) theirs-conflict, (s) show all options:
冲突符号说明:
符号 | 说明 |
---|---|
p | 标记冲突,暂不处理 |
df | 显示所有冲突 |
e | 编辑冲突 |
mc | 冲突以本地文件为准 |
tf | 冲突以远程仓库为准 |
s | 显示所有选项 |
一般先输入df
命令看冲突是否严重,如果不严重则通过e
直接编辑,编辑页面通常为
<<<<<<< .mine [your_version] ======= [their_version] >>>>>>> [version]
在<<<<<<< .mine
和 >>>>>>> [version]
之间解决冲突,.mine 是自己修改后的代码,version是别人提交的最新代码,然后保存。
回到Select界面,此时会多出一个(r) resolve
的命令。输入r
通知SVN已解决冲突。
使用postpone解决冲突
如果冲突很严重,需要和提交者讨论解决,可以输入p
标记,此时输入svn status
显示:
C [your_file] ? [your_file].working ? [your_file].merge-left.[version] ? [your_file].merge-right.[version]
冲突文件说明:
文件 | 说明 |
---|---|
[your_file] | 所有冲突标记在该文件 |
[your_file].working | 当前工作副本 |
[your_file].merge-left.[version] | 产生冲突前基础版本 |
[your_file].merge-right.[version] | 仓库里的最新版本 |
用以下命令解决冲突
$ svn resolve --accept [base | working | mine-conflict | theirs-conflict | mine-full | theirs-full] [conflicting file]
示例:
svn resolve --accept=working readme.txt
参数 | 说明 |
---|---|
base | 将[your_file].merge-left.[version]做为最终结果 |
working | 把[your_file]解决冲突后的结果做为最终结果 |
mine-conflict | 将[your_file].working做为最终结果 |
theirs-conflict | 将[your_file].merge-right.[version]做为最终结果 |
mine-full | 将所有[your_file].working做为最终结果 |
theirs-full | 将所有[your_file].merge-right.[version]做为最终结果 |
解决冲突后,文件状态变为M,这时再向仓库提交代码即可。
5、合并分支
feature分支通过测试后就可以合并到trunk分支。
首先切换到trunk分支,然后执行以下命令
$ svn merge [your_feature_branch_url]
merge还具有回滚的功能:
svn merge -r old:new .
注意不要少最后一个点,这表示把new版本会滚到old版本
顺利的话,feature分支就合并到trunk分支了,但是如果有别人和你修改了同一段代码并且提交到trunk分支就可能再次出现冲突。同样先解决冲突再提交。
6、删除分支
完成功能开发,合并到trunk后,删除feature分支
$ svn delete [your_feature_branch_url] -m [your_log]
结束
以上就是开发过程中常用的SVN命令,当然SVN的命令是非常丰富的,想要更强大的功能可以通过svn help
来进一步学习。
# svn help usage: svn <subcommand> [options] [args] Subversion command-line client. Type 'svn help <subcommand>' for help on a specific subcommand. Type 'svn --version' to see the program version and RA modules, 'svn --version --verbose' to see dependency versions as well, 'svn --version --quiet' to see just the version number. Most subcommands take file and/or directory arguments, recursing on the directories. If no arguments are supplied to such a command, it recurses on the current directory (inclusive) by default. Available subcommands: add auth blame (praise, annotate, ann) cat changelist (cl) checkout (co) cleanup commit (ci) copy (cp) delete (del, remove, rm) diff (di) export help (?, h) import info list (ls) lock log merge mergeinfo mkdir move (mv, rename, ren) patch propdel (pdel, pd) propedit (pedit, pe) propget (pget, pg) proplist (plist, pl) propset (pset, ps) relocate resolve resolved revert status (stat, st) switch (sw) unlock update (up) upgrade Subversion is a tool for version control. For additional information, see http://subversion.apache.org/
参考推荐:
git/svn reset/revert 回滚到服务器上的某一个版本
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2024-06-26 11:17:27
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: SVN 实用命令快速学习总结 (米扑博客)