大家都知道Subversion是版本控制软件,下面就来谈谈我的Subversion学习总结,主要有一些术语和基本命令,希望对你有所启发。
一、一些“术语”:
工作拷贝:
一个工作拷贝就是你本地机器的一个普通的目录,保存一些文件,你可以任意的编辑、编译它们,你的工作拷贝是你的私有工作区,Subversion不会自动把你的修改与其他人的合并,也不会把你的修改展示给别人。当你确定要“发布”自己的修改的时候,SVN会提供相应命令,这样你才能把你的工作和别人的工作合并,并使别人看到你的修改。通常你的工作拷贝的每一个文件夹里有一个以".svn"为名的文件夹,它用来帮助Subversion来识别哪个文件作个修改,以及哪个文件已经过期等等。
二、基本命令
◆Subversion学习总结,获取帮助:$svnhelp
◆得到一个工作拷贝:$svncheckouthtttp://svn.example.com/repos/calc这样你就有了一个/calc的个人拷贝,它是从:http://svn.example.com/repos/calc提取出来的。
◆得到一个工作拷贝并放到你的新目录中:$svncheckouthttp://svn.example.com/repos/calcsubv这样工作目录(拷贝)calc将放到你的新目录(subv)中。
SVN可以有多种不同方式访问的URL形式:
file:///用来访问本地的
http://用来访问SVN的Apache的WebDAV协议
https://同上,不过用ssl加密
svn://用来访问SVN自定义的协议的的
svn+ssh://同上,不过用ssh封装
◆Subversion学习总结,提交你的修改:
◆直接提交某个文件的修改:
$svncommitbutton.c这样,你就会把自己对button.c的修改提交到服务器上去,提交后会使版本库的版本号加1,以后可通过指定号码恢复(其他人的工作拷贝需要他们自己请求更新,才会把服务器上新版本更新到本地,看到你的修改,可能出现的覆盖问题后面有解决方法).
◆直接把所有修改的信息提交到版本库:
$svncommit由于既没有--message(或-m),也没有--file来描述修改的信息,所以SVN会启用一个你喜欢的编辑器来编辑日志描述消息。如果写描述时想要取消提交,那么直接关闭编辑器,不要保存,然后在提示中选a即abort,(如果选的是c即continue,那么应该就会提交没有描述信息的修改);如果你保存了日志,那么只需要简单删掉所有文本,再次保存。
◆提交时增加描述修改的日志信息:$svncommit--message"addsomeinfomation"这里,--message可以简化为-m,后面接的是描述信息的字符串。如果描述信息很短,就可以这样直接再命令行中指定。如果信息多,就需要指定文件,见后面。
◆提交时指定描述修改的日志文件:$svncommit--filelogmsg这里,利用了--file,后面接的就是相应的日志文件。
◆更新自己的工作拷贝:$svnupdate这样,将会把你的工作拷贝更新为服务器上最新的版本,看到其他人的修改。不用你自己指定,SVN会识别那些文件需要更新(可能出现的覆盖问题后面有解决方法)。该命令的输出信息将告诉你哪些文件被做了哪些修改到你的工作拷贝。
Subversion学习总结,SVN对update和commit可能产生问题的解决:
1)若在工作拷贝里没做修改,且服务器版本库在工作拷贝版本之后也没被提交过其他修改;那么svncommit不做任何事,svnupdate不做任何事。
2)若在工作拷贝里做过修改,但服务器版本库在修改前工作拷贝的版本后没被提交过其他修改;那么svncommit会成功地提交(更新服务器版本库),svnupdate不做任何事。
3)若在工作拷贝里没做修改,但服务器版本库在工作拷贝版本之后被提交过其他修改;那么svncommit不做任何事,svnupdate会把你的工作拷贝版本更新为版本库中最新的。
4)若工作拷贝里做过修改,且服务器版本库在修改前工作拷贝的版本后被提交过其他修改;那么svncommit首先会失败并要求update,svnupdate会合并版本库和本地的修改,如果有冲突会询问用户去解决(,之后就继续了??)。
◆检查自己的修改:$svnstatus
这个命令不会和版本库通信,其显示的信息是告诉你你的当前工作拷贝将对服务器上的版本库作怎样的修改,在当前工作拷贝的顶级目录运行,默认将递归检查子目录上所有的文件,该命令和update不一样,但有些共通之处(指出了变化)。
◆检查自己对某个文件的修改:
$svnstatusstuff/fish.c和上面的命令一样,不过指定了一个特定的文件项,那么就仅显示该文件项的信息。请关注下节Subversion学习总结。
【编辑推荐】