1 / 38

SVN by David Zhang

SVN by David Zhang. 内容. Svn帮助文档 Svn基本操作 Svn 锁定与解锁 Svn分支和合并 TracLink的使用. svn --help 用法: svn <subcommand> [options] [args] svn help <subcommand> SVN官方网站: http://subversion.tigris.org/ TracLink http://trac.edgewall.org/wiki/TracLinks. 帮助. 1.1 导入数据到版本库.

xanti
Download Presentation

SVN by David Zhang

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SVN by David Zhang

  2. 内容 Svn帮助文档 Svn基本操作 Svn 锁定与解锁 Svn分支和合并 TracLink的使用

  3. svn --help 用法: svn <subcommand> [options] [args] svn help <subcommand> SVN官方网站: http://subversion.tigris.org/ TracLink http://trac.edgewall.org/wiki/TracLinks 帮助

  4. 1.1 导入数据到版本库 svn import 是将未版本化文件导入版本库的最快方法,会根据需要创建中介目录。 $ svnadmin create /somewhere $ svn import mytreehttp://10.131.38.110/repo/test \ -m "Initial import" Adding mytree/foo.c Adding mytree/bar.c Adding mytree/subdir Adding mytree/subdir/quux.h Committed revision 1. 注意:如果import的是个目录, 则其下的内容直接加入到URL指定的位置内

  5. 1.2 初始化检出 使用Subversion,从checkout开始 创建本地拷贝 默认检出HEAD版本 $ svn checkout http://10.131.38.110/repos/test A trunk/Makefile.in A trunk/ac-helpers A trunk/ac-helpers/install.sh A trunk/ac-helpers/install-sh A trunk/build.conf ... Checked out revision 8810.

  6. 1.3 基本的工作循环 • 可能会取消一些修改 svn revert • 解决冲突(合并别人的修改) svn update svn resolved • 提交你的修改 svn commit • • 更新你的工作拷贝 • svn update • • 做出修改 • svn add • svn delete • svn copy • svn move • • 检验修改 • svn status • svn diff

  7. 1.3.1 更新你的工作副本 $ svn update U foo.c U bar.c Updated to revision 2. 每更新一项就输出一行信息,使用首字符来报告执行的动作。 这些字符的含义是: A 已添加 D 已删除 U 已更新 C 合并冲突 G 合并成功 E 已存在

  8. 1.3.2 修改你的工作副本 已存在文件可编辑器直接修改 不存在的文件通过以下几个命令添加 svn add foo #可以是文件和目录 svn delete foo #svn delete PATH | URL svn copy foo bar #svn copy SRC[@REV] DST svn move foo bar #svn move SRC DST svn mkdir blort #svn mkdir PATH | URL

  9. 1.3.3 检查你的修改 查看修改概况 $svn status A stuff/loot/bloo.h #A表示要添加的 C stuff/loot/lump.c #C表示冲突 D stuff/fish.c #D表示删除 M bar.c #M表示修改

  10. 1.3.4 检查你的本地修改的详情 $ svn diff #diff [-c M | -r N[:M]] [TARGET[@REV]...] $ svn diff > patchfile $ svn diff -- diff-cmd /usr/bin/diff \ --extensions '-bc' foo.c

  11. 1.3.5 取消本地修改 例2 $ svn status README README $ svn delete README D README $ svn revert README Reverted 'README' $ svn status README README • 例1 • $ svn status foo • ? foo • $ svn add foo • A foo • $ svn revert foo • Reverted 'foo' • $ svn status foo • ? foo

  12. 1.3.5 解决冲突(合并别人的修改) $ svn update U INSTALL #U表明本地没有修改 G README #G表示合并 C bar.c #C表示冲突 Updated to revision 46. 2. 遇到冲突时,三种选择: • “手动”合并冲突文本 • 用某一个临时文件覆盖你的工作文件。 • 运行svn revert 来放弃所有的本地修改。 3. $ svn resolved sandwich.txt Resolved conflicted state of 'sandwich.txt'

  13. 手工合并冲突 $ ls sandwich.* #因为冲突产生的额外文件 sandwich.txt sandwich.txt.mine sandwich.txt.r2 sandwich.txt.r1 $ vi sandwich.txt #修改冲突 $ svn resolved sandwich.txt $ svn commit -m "Go ahead and use my sandwich, discarding Sally's edits."

  14. 复制文件到你的工作文件 $ svn update C sandwich.txt Updated to revision 2. $ ls sandwich.* sandwich.txt sandwich.txt.mine sandwich.txt.r2 sandwich.txt.r1 $ cp sandwich.txt.r2 sandwich.txt $ svn resolved sandwich.txt $ svn ci

  15. 使用svn revert $ svn revert sandwich.txt Reverted 'sandwich.txt' $ ls sandwich.* sandwich.txt 注意,当你恢复一个冲突的文件时,不需要再运行svn resolved。 $ svn ci

  16. 提交你的修改 $ svn commit -m "Corrected number of cheese lices." Sending sandwich.txt Transmitting file data . Committed revision 3. $ svn commit -F logmsg Sending sandwich.txt Transmitting file data . Committed revision 4.

  17. 检验历史 svn log 每个版本附加在版本上的作者与日期 信息和所有路径修改。 svn diff 显示特定修改的行级详细信息。 svn cat 取得在特定版本的某一个文件显示在当前屏幕。 svn list 显示一个目录在某一版本存在的文件。

  18. 检验历史示例 • $ svn log • $ svn log -r 5:19 • $ svn log -r 19:5 • $ svn log -r 8 • $ svn log foo.c • $ svn log http://foo.com/svn/trunk/code/foo.c

  19. 浏览版本库 $ svn cat -r 2 rules.txt $ svn list -v http://svn.collab.net/repos/svn

  20. Svn 锁 三种锁: 1. lock 描述了一种避免用户之间冲突提交的排他机制 2. 防止不同客户端同时操作同一份工作拷贝的锁(锁定标志L,svn cleanup) 3. 数据库锁 锁定令牌:

  21. Svn 锁操作 上锁: $ svn lock file #file位于工作拷贝中 “file”被用户“DavidDW_Zhang@compal.com”锁定。 $ svn status file K file # K表示拥有锁定令牌 $ svn info file #URL 信息详细 解锁: $ svn unlock file “file”解除锁定 或者$ svn ci -m “.....” #也可解锁

  22. 没有锁定令牌 $ svn status -u M 23 bar.c M O 32 raisin.jpg #O表示被其他人锁定 revision: 105 $ svn info http://10.131.38.110/repos/test/file $ svn unlock –force file/http://…/repos/file

  23. 分支与合并 分支: 分支与主线分享共同的历史 Subversion并没有内在的分支概念—只有拷贝,当你拷贝一个目录,这个结果目录就是一个“分支”,只是因为你给了它这样一个含义而已。

  24. 创建分支 使用svn copy命令给你的工程做个拷贝 $ svn copy http://..../repos/trunk \ http://..../repos/branches/my-calc-branch \ -m "Creating a private branch of /calc/trunk." Committed revision 341. Subversion并没有内在的分支概念—只有拷 贝,当你拷贝一个目录,这个结果目录就是一个“分支”,只是因为你给了它这样一个含义 而已。

  25. 复制特定的修改 svn merge命令非常类似svn diff命令,它的结果作为本地修改作用到你的本地拷贝: $ svn merge -c 344 http://..../repos/trunk U integer.c $ svn status M integer.c 如果产生冲突,使用标准过程来解决这种状态,或者svn revert放弃本地修改

  26. svn merge 使用 svn merge 将两个源差异应用至工作拷贝 用法:svn merge revision1 revision2 destination $ svn merge http://..../repos/branch1@150 \ http://..../repos/branch2@212 my-working-copy $ svn merge -r 100:200 http://..../repos/truck \ my-working-copy $ svn merge -r 100:200 http://..../repos/trunk #省略写法

  27. 常见用例 合并分支到另一个分支 取消修改

  28. 合并分支到主干 比较两个目录树,然后应用比较结果到工作拷贝 哪两个树进行比较呢? 只需要比较分支的初始状态与最终状态 $ svn log #可以找出分支开始版本 或者 $ svn log -v –stop-on-copy \ http://..../repos/braches/...

  29. 合并分支到主干2 合并流程: 1. $ svn co http://..../repos/truck 2. $ cd truck 3. $ svn merge -r r1:r2 http://..../repos/branchs 4. $ svn status M integer.c ….. 5. $ svn commit -m “Merged my-calc-branch…” Sending integer.c ……. Transmitting file data ... Committed revision 406.

  30. 取消修改 $ svn merge -c -303 http://..../repos/calc/trunk U integer.c $ svn status M integer.c $ svn diff $ svn commit -m "Undoing change committed in r303." Sending integer.c Transmitting file data . Committed revision 350.

  31. 常用分支模式 发布分支 特性分支:不象发布分支(也许要永远支持),特性分支出生,使用了一段时间,合并到主干,然后最终被删除掉,它们在有限的时间里有用。

  32. 标签 标签:一个标签只是一个项目某一时间的“快照” 建立标签: $ svn copy http://..../repos/trunk \ http://..../repos/tags/release-1.0 \ -m "Tagging the 1.0 release of the 'calc' project." Committed revision 351.

  33. TracLinks 1. TracLink 是trac的基本特性之一,实质上是一种在Trac中使用的超连接。 2. 哪里需要使用TracLink: Source code (Subversion) commit messages Wiki pages 任何明确标明支持Wiki格式的地方(ticket、report、milestones等) 3. TracLink的一般使用形式 type:id

  34. 交叉引用-SVN TRAC 只要在SVN chenkin 的注释中加入关键字 fix #bug 就可以在SVN和Trac之间交叉引用,但是会这个bug的状态将变成fixed。 如果不想将bug的状态改变,需用关键字refs代替fix

  35. 交叉引用图例 交叉引用图例 • 使用refs关键字 • 使用fix关键字

  36. TracLink使用参考 Tickets: #1 or ticket:1 Ticket comments: comment:1:ticket:2 Reports: {1} or report:1 Changesets: r1, [1], changeset:1 or (restricted) [1/trunk], changeset:1/trunk Revision log: r1:3, [1:3] or log:@1:3, log:trunk@1:3, [2:5/trunk] Diffs (requires 0.10): diff:@1:3, diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default or diff:trunk/trac@3538//sandbox/vc-refactoring@3539 Parent page: [..] Milestones: milestone:1.0 Attachment: attachment:example.tgz (for current page attachment), attachment:attachment.1073.diff:ticket:944 Files: source:trunk/COPYING A specific file revision: source:/trunk/COPYING@200 A particular line of a specific file revision: source:/trunk/COPYING@200#L25

  37. TracLink使用2参考 • Display: • * Tickets: #1 or ticket:1 • * Ticket comments: comment:1:ticket:2 • * Reports: {1} or report:1 • * Changesets: r1, [1],changeset:1 or (restricted) [1/trunk],changeset:1/trunk • * Revision log: r1:3, [1:3] or log:@1:3, log:trunk@1:3, [2:5/trunk] • * Diffs (requires 0.10): diff:@1:3, diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default or diff:trunk/trac@3538//sandbox/vc-refactoring@3539 • * Parent page: .. • * Milestones: milestone:1.0 • * Attachment: attachment:example.tgz (for current page attachment), attachment:attachment.1073.diff:ticket:944 • (absolute path) • * Files: source:trunk/COPYING • * A specific file revision: source:/trunk/COPYING@200 • * A particular line of a specific file revision: source:/trunk/COPYING@200#L25

  38. Thanks!

More Related