赞
踩
(1)将项目导入到版本库,找到项目的文件夹,右击,找到SVN菜单,选择导入。
(2)从VisualSVN Server Manager中获取版本库的URL右击版本库选择 Copy URL to Clipboard。
(3)将获取到的URL复制到 URL of repository,在导入信息里面填上“导入项目版本库”,点击OK。
(4)输入用户名和密码。
(5)导入完成,点击OK。
(1)新建一个文件夹,右击选择SVN Checkout。
(2)输入URL(和上面的获取方式一样的),选择检出目录地址,点击OK。
(3)检出完毕,点击OK。
(4)检出完成后,打开检出目录查看文件夹,每个小的文件夹都有一个绿色的√。如图所示
(1)将需要增加的新文件放入到本地迁出的文件夹目录的相应位置中,鼠标选中新文件右键选择“Tortoise SVN”的“Add”项,如下图所示:
(2)鼠标选中项目文件夹右键选择“SVN Commit…”,将新文件上传配置库对应文件夹中(若只上传单个文件,只需点中单个文件上传也可)。
(1)当从配置库迁出相应目录后,他人对服务器上此目录内容进行了修改,则需要再次获取改动内容到本地目录的过程称为更新。更新可以针对一个文件、几个选中的文件或者整个文件目录。选中要被更新的文件,右键选择“SVN Update”项,如下:
(2)点击“SVN Update”后会弹出窗口显示更新的进度,如下:若上述框中的有文件出现亮红,说明来自配置库的内容与你本地修改内容合并时出现了冲突
(1)本地文件修改后,若是需要更新到服务器上,则需要提交(Commit)最新的更新。 Commit的作用是将本地最新修改的文件同步到SVN服务端,供其他人来参考或者使用,当然使用之前,要先Update一下,来确保是最新的,在修改文件上击右键,出现菜单,选择“SVN Commit…”,如下:
(2)然后填写关于本次更新的日志(log message)。
(3)当出现下图所示提示框,则表明刚刚的修改已成功提交,并且当前的SVN版本号加1。
在修改了某些文件后(文件未上传到配置库),需要返回到修改前的状态,则选中文件夹右键选择“Tortoise SVN”的“Revert...”项进行撤销,本地硬盘上的文件将恢复到修改前的内容,修改的内容将被删除。
(1)选中要被删除的文件,右键选择“Tortoise SVN”的“Delete”项,如下:
(2)删除文件后,鼠标选中项目文件夹右键选择“SVN Commit…”项进行提交,提交方式同增加文件的提交方式,提交后则将新文件从配置库中删除。
(1)当项目需要时可以在本地硬盘中将迁出的内容进行锁定,选中要被锁定的文件右键选择“Tortoise SVN”的“Get lock...”项进行锁定(锁定后他人将无法修改此文件),系统弹出锁定信息框。
(2)当文本文件锁定后,需要通过解锁他人才能继续对文件进行修改。其他人修改后无法提交的svn服务器中。
(3)选中被锁定的文件右键选择“Tortoise SVN”的“Release lock…”项进行解锁。
Show log顾名思义是显示日志的作用,主要是显示该文件或者该目录被执行的操作,是被谁修改了,以及修改的时间和日期。鼠标选中文件夹右键选择“Tortoise SVN”的“Show log”项,系统弹出此路径下的所有文件版本信息,如下:
修改文件名,选中需要重命名的文件或文件夹,然后右键“Tortoise SVN”的“Rename”,在弹出的对话框中输入新名称,点击“OK”按钮,并将修改文件名后的文件或文件夹“SVN Commit…”提交到SVN服务器上。
(1)SVN的标准目录结构:trunk、branch、tags;目录在SVN中并没有特别的意义,这三个目录反映了软件开发的通常模式。
trunk:主干,是日常开发进行的地方
branches:分支,一些阶段性的release版本,这些版本是可以继续进行开发和维护的
tags:阶段性的发布版本,存放到这里
(2)日常开发的流程及问题:
假说现在有一个游戏项目,项目经理说今天项目要上线了,我们要把代码打包部署,然后供玩家使用,玩家正在玩的时候我们还是要继续进行新需求的开发吧,加入我们不使用svn的目录结构,我们继续在原有的代码上开发,又过了两天,有玩家反馈说游戏有bug,根据玩家提供的bug信息,我们修复了bug,修复了bug后准备在下一次维护服务器的时候将修复bug后的代码部署到服务器上。
现在问题来了,我们还没准备好将正在开发的新功能上线,但是和新功能相关的代码已经提到svn了,bug改完也提到svn了,这个时候打包就会将新功能打到包里,这肯定是不允许的。那怎么解决呢?
(3)使用svn的标准目录结构
项目上线后,将上线时的代码切出一个分支branches,然后在主干继续进行新需求的开发,当上线的项目出现bug时,开发人员在分支上修复bug(分支的功能和svn是一样的),修复完bug后将代码打包重新部署,然后将代码和并到主干trunk上,当项目线上运行一段时间已经很稳定时,将项目切出一个tags,tags一般是只读的。这样就比较好的解决了新需求开发与bug修复的矛盾
右击已经存在的SVN项目->branch/tag,弹出框的to path输入新的分支名称,建议/branch/xxx,点击OK就创建出xxx分支.(建议创建前先svn update)。这个操作速度非常快,新建的branch在repository中其实只是一个指向trunk某个revision的软连接而已,并没有真的复制文件。
右击已经存在的SVN项目->switch,弹出框的to path输入分支名称,上面新建了/branch/xxx分支,如果想要切换/branch/xxx分支,则输入/branch/xxx点击OK.
branch和trunk在独立、并行地开发。为了防止在“错误”的道路上越走越远,现在branch意识到是时候和trunk来一次同步了(将trunk合并到branch)。
(1)在本地trunk中先update一下,有冲突的解决冲突,保证trunk和repository已经完全同步。
(2)然后在/branches/上右键,依次选择"TortoiseSVN" -> “merge a range of revisions”,在弹出的窗口中选择第一项"Merge a range of revision",这个类型的Merge已经介绍得很清楚,适用于将某个分支或主线上提交的多个revision间的变化合并到另外一个分支上。
(3)由于是要从trunk合并到branch,理所当然这里的"URL to merge from"应该填trunk的路径,"Revision range to merge"很好理解,就是你要将trunk的哪些revision所对应的变化合并到branch中,可以是某一连串的revision,比如4-7,15-HEAD,也可以是某个单独的revision号。由于在r15中,trunk修改了bbb文件,所以这里的revision只需填15即可。
(4)在这里只需保留默认设置即可。在点击Merge按钮前你可以先Test merge一把,看成功与否,以及merge的详细信息。点击Merge按钮后trunk所做的修改将同步到branch中。
(5)成功后会出现如下的界面。
(6)此时,本地的分支上就已经有了主干分支修改的代码,但是服务器中的分支还没有。此时需要svn commit一下,以同步到svn服务器的代码。
(1)在本地副本上进行操作,选择主干上的源代码文件,右键选择tortoiseSVN菜单,点击合并。(将trunk代码 拉回本地,checkout到本地。在trunk 代码上 使用merge)如图
(2)选择merge two different trees,如图,也可使用merge a range of revisions 但在报 from url must be ancestrally related to to url 错误的情况下选择使用第二种。
(3)在from中选择 trunk路径,在to中选择 branches 路径,由于是在trunk上把branches的代码合并过来,理所当然这里的“from”应该填trunk的路径,to选branches的路径。如图
(4)选择默认选项即可,建议合并merge时,使用test merge 来查看有多少冲突,如果冲突较多,可分多次合并,最后点击merge进行合并。合并成功后需要将主干(trunk)上合并过的文件提交到svn代码库,如图
图中各项的含义:
(5)确定合并后的代码,将主干(trunk)上合并过的文件提交commit到svn代码库
右击已经存在的SVN项目->repo browser,弹出框的左边选择需要删除的分支右击->delete
对于刚接触svn的人来说,svn冲突后,不能提交是件让人很郁闷的事情。最让人郁闷的事,是代码间的覆盖。你把我代码盖了,我会很火大的。谁把谁的盖了都不爽。
假设A、B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt文件的版本号已经变成101了。同时B用户在版本号为100的kingtuns.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。此时B用户选择更新,更新就会出现代码冲突的问题。
冲突发生时,subversion会在当前工作目录中保存所有的目标文件版本[上次更新版本、当前获取的版本(即别人提交的版本)、自己更新的版本、目标文件]。如上图所示产生冲突的文件名为Constant.java,则对应的文件名分别是:
Constant.java.r24
Constant.java.r25
Constant.java.mine
Constant.java。同时在目标文件中标记来自不同用户的更改。
Constant.java.mine---这个文件是A用户在24版本中做了修改要提交的文件。它的内容是:13版本内容+A用户的修改
Constant.java.r24----这个文件是A用户最初的13版本的Constant.java。它的内容是:13版本内容
Constant.java.r25----这个文件时svn服务器中Constant.java的最新版本,这里既是B用户提交后的14版本。它的内容是:13版本内容+B用户的修改
Constant.java --------由于A用户选择了直接更新,此文件就是svn将最新版本24与A用户的修改合并后的文件。
放弃自己修改的内容,进行Revert操作,使其文件成为当前版本的最初内容。然后update使其文件成为最新版本,再在最新版本上修改提交。操作如下图:
==>
(1)右键冲突的文件>>>TortoiseSVN>>>>Edit conflicts>>>,会弹出解决冲突界面。
(2)软件的界面布局
(3)某块代码的合并
(4)使用某单方面的文件
(5)把我的代码插入他的代码前面
(6)把我的代码插入他的代码前面-效果
(7)保存后,重新提交到svn就可以了。
(1)我们可以将上图的用户Constant.java的内容整理下,使其满足条件,然后选择TortoiseSVN>>>>Resolve,这时Constant.java.mine、Constant.java.r13、Constant.java.r14将会消失。用户A就可以顺利提交了。
在代码的编写过程中,难免有些错误需要修改,或者想从以前的文件进行代码修改,这样就涉及到版本的追踪,如果你以前提交时日志写的非常清楚,那版本追踪回滚起来就事半功倍、得心应手。
选中要回滚的文件,右键>>TortoiseSVN>>>show log >>选中要回滚的版本号>>>右键>>
做完上述操作后,本地的代码会回滚,但是svn服务器中的代码并没有回滚,记得commit一下。
svn import -m "日志信息" 本地文件路径 svn路径
svn checkout http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
或者:svn co http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
注意:
(1)增加单一文件
①svn add 文件名
注:告诉SVN服务器要添加文件了,还要用svn commint -m真实的上传上去!
②svn add *.java <- 添加当前目录下所有的java文件
svn commit -m “添加我的测试用全部java文件” *.java
(2)创建纳入版本控制下的新目录
svn mkdir 文件名 在本地创建纳入svn管理的文件目录
svn mkdir URL路径 -m "备注" 直接在svn仓库上创建一个文件夹目录
(3)添加所有新文件
svn add * --force 添加当前目录下不处于svn版本管理下的所有文件
svn add * 添加当前目录下的所有文件,即使该文件在svn上已经存在。如果该文件已经在svn上存在,那么会提示你( is already under version control 文件已经处于SVN的版本管理了)
svn update
svn update -r 修正版本 文件名
svn update 文件名
或者 svn up
svn update <- 后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本
svn update -r 200 test.java <- 将版本库中的文件 test.java 还原到修正版本(revision)200
svn update test.java <- 更新与版本库同步。
提交的时候提示过期冲突,需要先 update 修改文件,
然后清除svn resolved,最后再提交commit。
svn commit -m “提交备注信息文本” [-N] [--no-unlock] 文件名
svn ci -m “提交备注信息文本” [-N] [--no-unlock] 文件名
必须带上-m参数,参数可以为空,但是必须写上-m,否则会出现如下的结果:
svn delete * --force 删除所有的文件并记录到下次提交里
svn rm(del) URL路径 -m "备注" 删除svn路径下的文件,本地文件不会删除,更新后本地文件才会删除
svn rm(del) 文件名 -m "备注" 本地删除文件并记录到下次提交里
注:手动在本地删除文件的话svn是不会识别和记录的,需要执行下面的命令将改动记录添加到svn的版本管理里之后提交到svn服务器
推荐通过先本地删除,再提交的的操作:
svn delete 文件名
svn ci -m “删除备注信息文本”
例如:要删除svn服务器上的文件test。java可有两种方式操作,推荐使用第②种操作。
svn ci -m “删除测试文件test.java”
①svn export [-r 版本号] http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名————服务器到本地
②svn export 本地检出的(即带有.svn文件夹的)目录全路径 要导出的本地目录全路径————本地到本地其他路径
注:①第一种从版本库导出干净工作目录树的形式是指定URL,如果指定了修订版本号,会导出相应的版本,如果没有指定修订版本,则会导出最新的,导出到指定位置。如果省略 本地目录全路径,URL的最后一部分会作为本地目录的名字。
②第二种形式是指定本地检出的目录全路径 到 要导出的本地目录全路径,所有的本地修改将会保留,但是不在版本控制下(即没提交的新文件,因为.svn文件夹里没有与之相关的信息记录)的文件不会拷贝。
svn lock -m “加锁备注信息文本“ [--force] 文件名
svn unlock 文件名
(1)比较差异的命令
svn diff 文件名 <-将修改的文件与基础版本比较
svn diff -r 修正版本号m:修正版本号n 文件名 <- 对 修正版本号28和 修正版本号29 比较差异
(2)差异比较结果解读
(1)Index: test.txt
(2)============================================================
(3)--- test.txt (revision 1002)
(4)+++ test.txt (revision 1003)
(5)@@ -2,4 +2,5 @@
(6)To sunny Day
(7)-To wether Day
(8)+sweat Sunny
(9)Nonthon changed
(10)Next time GO GO
第一行,显示文件
第二行,分隔符
第三行,老版本用“-”表示
第四行,新版本用“+”表示
第五行,老版本从第2行开始显示4行,新版本从2行开始显示。显示5行
第六行,两个版本都有
第七行,只有老版本有
第八行,只有新版本有
第九行,两个版本都有
第十行,两个版本都有
==================
(3)unified diff format统一差异格式
一种标准的文件比较格式, 不同的行之前标上'+'或者'-'表示不同的文件, 新文件用'+'表示, 旧文件用'-'表示,@@表示不同出现在哪一行。
提示:
使用svn diff 指令对比文件差异的时候如果出现如下错误:提示:Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
原因:
svn add的时候会首先读取一部分文字来判断该文件的类型 如果文件内容开头为汉字的话则会被识别为二进制文件,如果是字母或数字的话则会被识别为text/plain文件 text/plain文件是可以正常输出修改对比结果的,处理方式选择:
①则将该文件设置为text/plain的文件类型,然后在进行修改,设置之后的修改记录对比的时候就可以正确显示对比的结果了
②配置svn config文件 ,在添加文件的时候就正确的设置他的类型自动匹配:(只对add或者import文件时起作用,如果本来就存在服务器中的文件没效果。)
#修改subversion的配置文件: linux— open
windows7— C:\Users\${user}\AppData\Roaming\Subversion\config
#设置enable-auto-props
enable-auto-props = yes
#在[auto-props]模块增加
*.js = svn:mime-type=text/javascript
*.css = svn:mime-type=text/css
*.html = svn:mime-type=text/heml
*.txt = svn:mime-type=text/plain
*.png = svn:mime-type=image/png
*.jpg = svn:mime-type=image/jpeg
③使用--froce强制输出对比结果
例如:svn diff -r 1002:1003 --froce
④使用 svn propset svn:mime-type pain 文件名/路径 设置文件的mime-type属性 ,之后添加的添加的修改内容则可以正常输出显示对比内容
svn help <- 全部功能选项
svn help ci <- 具体功能的说明
svn switch http://目录全路径 本地目录全路径
例子:
svn switch http://localhost/test/456 . <- (原为123的分支)当前所在目录分支到localhost/test/456
svn resolved [本地目录全路径]
例子:
$ svn update
C foo.c
Updated to revision 31.
如果你在更新时得到冲突,你的工作拷贝会产生三个新的文件:
$ ls
foo.c
foo.c.mine
foo.c.r30
foo.c.r31
当你解决了foo.c的冲突,并且准备提交,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。
你可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。
不checkout而查看输出特定文件或URL的内容
svn cat http://文件全路径
例子:
svn cat http://localhost/test/readme.txt
(1)查看log信息
svn log 文件名 查看这个文件的所有log信息
svn log * 检查当前文件夹的log历史
svn log textPlain.txt@88284 查看文件textPlain.txt版本号为88284的log信息,在次版本号之后提交的Log信息不会显示,因为没添加到版本号为88284的文件log里
svn log trunk -l 5 显示trunk文件夹最近5条Log信息
查看日志
svn log 文件名
例子:
svn log test.php<- 显示这个文件的所有修改记录,及其版本号的变化
(2)查看服务器上文件列表
svn list(或者 svn ls) 本地/SVN路径 查看路径下的文件列表,可以是本地路径或者SVN路径(默认为本地路径)
svn list --recursive 本地/SVN路径 按照层级打印文件列表
查看文件或者目录状态
svn st 目录路径/名
svn status 目录路径/名<- 目录下的文件和子目录的状态,正常状态不显示
【?:不在svn的控制中; M:内容被修改;C:发生冲突;
A:预定加入到版本库;K:被锁定】
svn -v 目录路径/名
svn status -v 目录路径/名<- 显示文件和子目录状态
【第一列保持相同,第二列显示工作版本号,
第三和第四列显示最后一次修改的版本号和修改人】
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,
原因是svn在本地的.svn中保留了本地版本的原始拷贝。
(3)查看文件详细信息
svn info 文件名
例子:
svn info test.php
(4)查看文件信息
svn info 文件名/路径名 查看文件的信息
(5)复制文件
svn copy 3text.txt 路径 文件从当前文件夹复制到填写的路径下,然后可以直接提交,不需要再使用add添加文件了
(6)直接查看文件里的内容
svn cat 文件路径 查看SVN上的文件内容,不需要将文件checout到本地,后面跟的可以是文件名或者路径
svn cat -r 88258 test 查看svn下88258版本对应的文件内容
cat 文件名 查看本地文件内容
(1)恢复本地修改
svn revert [--recursive] 文件名 <—如果该文件更新后没提交,那么将回滚至服务器最新的版本,本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录。不会恢复被删除的文件
svn revert index.jsp <- 丢弃对一个文件的修改
svn revert --recursive . <-回退整个文件夹至服务器最新版本,. 为当前目录
(2)恢复服务器的文件
如果文件提交过了,那么先将该文件提交一下,然后log出他最后一次的提交记录(假如是31),然后使用merge命令将代码回退到 30版本
.从trunk合并到分支及反向合并
--从trunk合并到branch
cd branch/1.0 进入分支目录
svn merge trunk目录 从trunk合并代码
--从branch合并到trunk
cd trunk 进入trunk目录
svn merge branch目录 从分支合并到trunk
19、新建一个分支copy
svn copy branchA branchB -m "make B branch" // 从branchA拷贝出一个新分支branchB
20、合并内容到分支merge
svn merge branchA branchB // 把对branchA的修改合并到分支branchB
svnadmin create app
(1)打开eclipse,在Help菜单中找到marketPlace,点击进入。
(2)在搜索框Find中输入subclipse,点击右边的Go按钮查询;subclipse找到之后,点击右下角的按钮install安装。
(3)选择需要安装的一些文件,默认全选即可,点击Next进行下一步操作。
(4)同意许可协议,勾选“I accept the terms of the license agreements”,然后点击Finish完成即可。
(5)安装过程展示,安装过程中可能会出现一些提示,同意即可。
(6)subclipse安装完成之后需要重启eclipse。
(7)subclipse usage(subclipse使用情况报告)可勾选可不选,自由决定。一般不用勾选。这样就算安装完成了。
(1)具体操作:打开Eclipse --> Help --> Install New Software --> 点击add按钮,输入下载地址:http://subclipse.tigris.org/update_1.10.x,点击OK。
(2)将Subclipse和SVNKit打勾后,一路next或agree到结束即可。
具体操作:百度搜索subclipse-site-1.10.x(看自己想安装哪个版本) --> 解压缩后在eclipse目录下找到dropins文件夹,进入dropins文件夹并新建一个文件夹名为svn,将features和plugins文件夹复制到svn目录下-->重启下Eclipse即可。
(1)subclipse安装完成后,就可以使用SVN了。在Window菜单中依次执行:Show View --> other。
(2)在弹出的Show View对话框中检索SVN关键字,即可快速找到SVN资源库,选中,确定。
(3)“SVN资源库”会出现在“问题视图”窗口中。注:问题视图即我们常说的“后台”,用于显示代码或项目配置的错误,双击错误项可以快速定位代码。
(4)在SVN资源库窗口的空白处单击鼠标右键,“新建”一个“资源库位置”。
(5)添加新的SVN资源库,在位置“location”或者“URL”中输入正确的服务器地址,然后Finish即可。
(6)输入你的用户名和密码,点击“保存密码”,以便于下次更快速登录。
(1)右键选择需要上传的项目,在Team下Share Project。
(2)选择SVN资源库,点击Next继续下一步。
(3)将项目共享至SVN资源库,选择现有资源库或者创建新位置,点击next下一步。
(4)选择SVN资源库中的文件夹名,或者可以使用指定的模块名,这个是已经在服务器指定好的,finish完成。
(5)“是否现在打开此透视图”提示。
(6)为了进一步看清效果,我们现在可以在网页中打开看看。打开项目文件夹,空的!需要执行下步。
(7)提交:同样,右键单击项目,选择Team,这一次我们发现其中多了很多项选择,点击“提交”。
(8)提交地址,可以在此写入一些操作说明,点击OK。
(9)再次回到网页中,可以看到所有的文件都已经上传上去了。
(1)切换到SVN资源库,右键单击想要检出的项目,选择“检出为……”
(2)作为工作空间中的项目检出,输入项目名称,为了保持一致性可以直接默认,然后Finish。
(3)检出之后的项目会直接呈现在eclipse中,实际是将项目导出到了设定的工作空间。
(1)导出是指可以直接导出到本地电脑上的任意位置。同样,右键单击所选项目,选择“导出”项。
(2)在弹出的对话框中通过浏览按钮选择导出目录即可。
(1)切换至SVN资源库中,右键单击想要删除的项目,选择“删除”。
(2)编辑提交注释,点击OK完成。
选中项目>>右键>>team>>还原>>选中要还原的文件,确定即可。
5.3.3.6 切换分支
选中项目>>右键>>team>>切换>>选中要要切换的分支路径,确定即可。
提交代码之前应该先“更新”一下,这样做的目的是为了能使自己的版本与别人更新的版本保持一致,保证代码不会冲突。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。