svn命令总结(原创)
以下是本人于2011-1-19 对自己经常用到的 svn命令的总结,记载于此,希望能帮助自己记忆,顺便可以帮助下初学者。----yuanfang
(一)求助:
svn help
svn help subcommand (ext: svn help import )
(二) 导入数据到版本库:
(svn import 和 svn add)
•svn import:
$ svnadmin create /var/svn/newrepos
$ svn import mytree file:///var/svn/newrepos/some/project \
-m "Initial import"
Adding mytree/foo.c
Adding mytree/bar.c
Adding mytree/subdir
Adding mytree/subdir/quux.h
Committed revision 1.
检验下:$ svn list file:///var/svn/newrepos/some/project
bar.c
foo.c
subdir/
•一般的版本库布局:
尽管 Subversion 的灵活性允许你自由布局版本库,但我们有一套推荐的方式,创建一个 trunk
目录来保存开发的“主线”,一个 branches 目录存放分支拷贝,tags 目录保存标签拷贝,例如:
$ svn list file:///var/svn/repos
/trunk
/branches
/tags
(三) 导出工作副本:
$ svn checkout(co) http://svn.collab.net/repos/svn/trunk
(四)工作流程
1. 更新你的工作副本。
• svn update(up)
2. 做出修改
(• svn add • svn delete • svn copy • svn move)
•svn add foo
调度将文件, 目录或者符号链接 foo 添加到版本库。当你下次提交后,foo 会成为其父目录的
一个子对象。注意,如果 foo 是目录,所有 foo 中的内容也会调度增加。如果你只想添加 foo
本身,请使用 --non-recursive (-N) 参数。
•svn delete foo
调度将文件, 目录或者符号链接 foo 从版本库中删除,如果 foo 是文件或符号链接,它会马上
从工作副本中删除。如果 foo 是目录,不会被删除,但是 Subversion 调度删除它。当你提交修
改后,foo 就会在你的工作副本和版本库中被删除。1
•svn copy foo bar
建立一个新条目 bar 作为 foo 的复制品,并且自动调度增加 bar,当在下次提交时会将 bar
添加到版本库,这种复制会记录下来历史(按照来自 foo 的方式记录)。如果不传递 --parents,
svn copy 并不建立中介目录。
•svn move foo bar
这个命令与与运行 svn copy foo bar; svn delete foo 完全相同,bar 作为 foo 的拷
贝调度添加,foo 已经调度删除。如果不传递 --parents,svn move 不建立中介的目录。
•svn mkdir blort
这个命令同运行 mkdir blort; svn add blort 相同,也就是创建一个叫做 blort 的文
件,并且调度增加到版本库。
3. 检验修改
• svn status 查看你的修改概况
$svn status
? scratch.c # file is not under version control
A stuff/loot/bloo.h # file is scheduled for addition
C stuff/loot/lump.c # file has textual conflicts from an update
D stuff/fish.c # file is scheduled for deletion
M bar.c # the content in bar.c has local modifications
(A:预定加入到版本库的文件, 目录或符号链的item。
C:文件 item 发生了冲突。从服务器收到的修改与工作副本的本地修改发生交迭(在更新期间不会
被解决)。在你提交到版本库前,必须手工解决冲突。
D:文件, 目录或是符号链item预定从版本库中删除。
M:文件item的内容被修改了。
)
如果你传递一个路径给svn status(st),它只给你这个项目的信息:
$ svn status(st) stuff/fish.c
D stuff/fish.c
svn status也有一个--verbose(-v)选项,它可以显示工作副本中的所有项目,即使没有改变过
的:
$ svn status -v
• svn diff 检查你的本地修改的详情
4. 取消本地的一些修改
• svn revert
$ svn status foo
? foo
$ svn add foo
A foo
$ svn revert foo
Reverted 'foo'
$ svn status foo
? foo
svn revert item 与删除item,然后执行 svn update -r BASE item 的效果完
全一样。
5. 解决冲突(合并别人的修改)
• svn update
• svn resolve
6. 提交你的修改
• svn commit(ci)
$ svn commit -m "Add another rule" (-m message)
(五)查看历史
1. 产生历史修改列表
• svn log
Shows you broad information: log messages with date and author information attached to revisions and which paths changed in each revision
$ svn log
$ svn log -r 5:19 # shows logs 5 through 19 in chronological order
$ svn log -r 19:5 # shows logs 5 through 19 in reverse order
$ svn log -r 8 # shows log for revision 8
$ svn log foo.c
...
$ svn log http://foo.com/svn/trunk/code/foo.c
...
$ svn log -r 8 -v (-v verbose详细的)
------------------------------------------------------------------------
r8 | sally | 2008-05-21 13:19:25 -0500 (Wed, 21 May 2008) | 1 line
Changed paths:
M /trunk/code/foo.c
M /trunk/code/bar.h
A /trunk/code/doc/README
2. 检查历史修改详情
• svn diff
• 检查本地修改 svn diff
• 比较工作副本与版本库 $ svn diff -r 3 rules.txt
• 比较版本库中的版本 $ svn diff -r 2:3 rules.txt
$ svn diff -c 3 rules.txt 查看修改 (-c change)
$ svn diff -c 5 http://svn.example.com/repos/example/trunk/text/rules.txt
3. 显示特定修改的行级详细信息
• svn cat
Retrieves a file as it existed in a particular revision number and displays it on your screen
$ svn cat -r 2 rules.txt
你可以重定向输出到一个文件:
$ svn cat -r 2 rules.txt > rules.txt.v2
4. 显示指定版本的目录中的文件
• svn list 可以在不下载文件到本地目录的情况下来察看目录中的文件
$ svn list(ls) -v http://svn.collab.net/repos/svn
20620 harry 1084 Jul 13 2006 README
23339 harry Feb 04 01:40 branches/
21282 sally Aug 27 09:41 developer-resources/
23198 harry Jan 23 17:17 tags/
23351 sally Feb 05 13:26 trunk/