[size=medium]转载:http://jiangzhengjun.iteye.com/blog/491824
[b]一、基本使用[/b]
[b]1、图标说明:[/b]
灰色向右箭头:本地修改过
蓝色向左箭头:SVN上修改过
灰色向右且中间有个加号的箭头:本地比SVN上多出的文件
蓝色向左且中间有个加号的箭头:SVN上比本地多出的文件
灰色向右且中间有个减号的箭头:本地删除了,而SVN上未删除的文件
蓝色向左且中间有个减号的箭头:SVN上删除了,而本地未删除的文件
红色双向箭头:SVN上修改过,本地也修改过的文件
[b]2、与代码库断开连接[/b]
可以与代码库断开,具体操作 右击|小组|断开连接...,在操作过程中可以删除svn相关管理文件,也可保留。
[b]3、导入项目[/b]
可以从代码库上把工程导到本地,个体操作 文件|导入...|SVN|从 SVN 检出项目。注:在此操作过程中有一个“选择检出的方式”选项,有两种,第一种是“做为新项目检出,并使用新建项目向导进行配置(仅当资源库中不存在.project工程文件时才可用,意思是如果代码库中有了这个工程文件,那么它就认为这是一个信息完整的工程,在导入的过程中就不需要再创建工程——选这选那的,因为.project工程文件中已包含了这一些列的信息,所以只有在代码库中不存在.project工程文件时才可选择)”;第二种是“做为工作空间中的项目检出”,这一选项不管代码库中是否有.project文件都是可以选择的,如果代码库中没有.project文件时,选择此种方式,会创建一个简单的工程,那不是Java工程,或其他代码工程,这种工程无不进行相应手工设置是不能进行相应开发的,所以在代码库上无.project工程文件导入时,最好选择前一选项,根据新建项目向导来进行相应设置并自动生成.project工程文件。
[b]4、添加文件或目录[/b]
如果将文件添加到项目中,它不会自动成为版本控制的一部分 —— 您需要明确将其添加到特定的存储库中。右击新文件,然后选择 Team > Add to Version Control。就是这样!下一次将此项目中的变更提交给存储库时,新文件也会检入。
[b]5、忽略文件[/b]
如果项目生成文件,或者包括您不想检入的 Subversion 存储库文件,则可以通知 Subclipse 忽略它们。右击您要在版本控制中排除的文件或目录,然后选择 Team > Add to svn:ignore 即可显示Add to svn:ignore 对话框。
[b]6、排除class文件[/b]
不要把class目录上传到服务器上,起初我没有删掉它,更改提交没有问题,但在更新时总是报错:……Working copy not locked; this is probably a bug, please report svn:……,提示就是class目录下的.svn有毛病。原因可能是在Eclipse编译时,将src目录下的svn配置一起编译到了class文件中,并且在编译时先会删除class中的内容,再编译,这就导致了本地配置与配置库上不一致。需要注意的是,请不要将动态生成的目录添加到SVN,否则其他人Check out的之后,再Update容易出错,例如class目录,不需要提交上去
[b]7、svn:need-lock属性[/b]
可以用来在文件(例如,对二进制文件非常有用)上强加排斥锁。一个定义了svn:need-lock属性的文件一次只能被一个人修改。当该文件被检出时,它是只读的。如果你想修改该文件,你需要首先使用"Team>Lock"菜单选项。之后,使用"Team> Unlock"释放该文件,或仅提交你的变化,也会释放锁,但别人的文件还是只读的,只有别人在获取了锁之后,再能修改该文件。其实该属性以一种强迫的属形势让用户在修改前一定要选获取锁,再能修改该文件,这样就不需要等到提交时再发现早已被别人锁住了。
[b]8、Tag和Branch[/b]
在Subversion中,很容易创建新的tag和branch。你可以使用tag来标识一个特定的版本(使用一种可读的名字,例如"Release 1.0");而一个branch用于新的开发工作而不影响主源码基(称作trunk)。在一个branch上的开发仍会继续进行,直到开发者已经为把变化集成回主trunk作好准备。
在Subversion中,branch和tag都是通过制作给定修订的一个虚拟副本(以另一个名字和/或另一个目录)创建的。在常规情况下,branch存储在branches目录下,tag位于tags目录下,尽管在实践中为了满足你的工程你可以使用自己的任何定制。
从Eclipse中,"Team>Branch/Tag"菜单能够使你创建branch和tag。其中,Browse按钮提供了一种方便的方法来查看有哪些branch和tag存在于仓库中。
当你使用"Team>Switch"创建成功一个新的branch或tag时,你可以非常容易地在branches之间进行切换。无论何时你切换到一个不同的branch(或返回到trunk),Subversion将仅更新文件(它需要保持你的当前工作的副本与目的branch之间的同步)。
[b]二、SVN协同开发中的规范:[/b]
[b]1、先更新,再提交[/b]
如果别人和自己更改的是同一个文件,那么update时会自动进行合并,但如果修改的是同一行,那么合并时会产生冲突。
更新时注意所更新文件的列表,如果提交过程中产生了更新,则也是需要重新编译并且完成自己的一些必要测试,再进行提交。
[size=xx-small][b]2、多提交[/b]
每次提交以几小时为单位。在开发功能模块的时候,可以每完成一个小细节功能的测试,就提交一次,在修改bug的时候,每修改掉一个bug并且确认修改了这个bug,也就提交一次。
[b]3、不要提交不能通过编译的代码[/b]
代码在提交之前,首先要确认自己能够在本地编译。如果在代码中使用了第三方类库,要考虑到项目组成员中有些成员可能没有安装相应的第三方类库。项目经理在准备项目工作区域的时候,需要考虑到这样的情况,确保开发小组成员在签出代码之后能够在统一的环境中进行编译。
[b]4、每次提交必须书写明晰的注释[/b]
明晰的标注要能够概要的描述所提交文件的信息,让项目组其他成员在看到标注后不用详细看代码就能了解你所做的修改。
[b]5、提交时注意不要提交本地生成的文件[/b]
例如eclipse中的.classpath文件,Windows生成的缩略图Thumbs.db,项目编译生成的临时文件.obj, .class等等。如果项目中没有进行这方面的配置来强行禁止提交这样的文件,请自觉不要提交这样的文件。提交了这样的文件后,别人在更新后就可能与本地的环境冲突从而影响大家的工作。
[b]6、不要提交自己不明白的代码[/b]
代码在提交入SVN之后,你的代码将被项目成员所分享。如果提交了你不明白的代码,你看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。因此在引入任何第三方代码之前,确保你对这个代码有一个很清晰的了解。
[b]7、慎用锁定功能[/b]
在项目中要慎用锁定的功能,在你锁定了一个文件之后别人就无法继续修改提交该文件,虽然可以减少冲突的发生率,但是可能会影响项目组中其他人员的工作。平时只有在编辑那些无法合并的文件(例如图片文件,flash文件等)时,才适当的采用锁定操作。[/size]
[b]一、基本使用[/b]
[b]1、图标说明:[/b]
灰色向右箭头:本地修改过
蓝色向左箭头:SVN上修改过
灰色向右且中间有个加号的箭头:本地比SVN上多出的文件
蓝色向左且中间有个加号的箭头:SVN上比本地多出的文件
灰色向右且中间有个减号的箭头:本地删除了,而SVN上未删除的文件
蓝色向左且中间有个减号的箭头:SVN上删除了,而本地未删除的文件
红色双向箭头:SVN上修改过,本地也修改过的文件
[b]2、与代码库断开连接[/b]
可以与代码库断开,具体操作 右击|小组|断开连接...,在操作过程中可以删除svn相关管理文件,也可保留。
[b]3、导入项目[/b]
可以从代码库上把工程导到本地,个体操作 文件|导入...|SVN|从 SVN 检出项目。注:在此操作过程中有一个“选择检出的方式”选项,有两种,第一种是“做为新项目检出,并使用新建项目向导进行配置(仅当资源库中不存在.project工程文件时才可用,意思是如果代码库中有了这个工程文件,那么它就认为这是一个信息完整的工程,在导入的过程中就不需要再创建工程——选这选那的,因为.project工程文件中已包含了这一些列的信息,所以只有在代码库中不存在.project工程文件时才可选择)”;第二种是“做为工作空间中的项目检出”,这一选项不管代码库中是否有.project文件都是可以选择的,如果代码库中没有.project文件时,选择此种方式,会创建一个简单的工程,那不是Java工程,或其他代码工程,这种工程无不进行相应手工设置是不能进行相应开发的,所以在代码库上无.project工程文件导入时,最好选择前一选项,根据新建项目向导来进行相应设置并自动生成.project工程文件。
[b]4、添加文件或目录[/b]
如果将文件添加到项目中,它不会自动成为版本控制的一部分 —— 您需要明确将其添加到特定的存储库中。右击新文件,然后选择 Team > Add to Version Control。就是这样!下一次将此项目中的变更提交给存储库时,新文件也会检入。
[b]5、忽略文件[/b]
如果项目生成文件,或者包括您不想检入的 Subversion 存储库文件,则可以通知 Subclipse 忽略它们。右击您要在版本控制中排除的文件或目录,然后选择 Team > Add to svn:ignore 即可显示Add to svn:ignore 对话框。
[b]6、排除class文件[/b]
不要把class目录上传到服务器上,起初我没有删掉它,更改提交没有问题,但在更新时总是报错:……Working copy not locked; this is probably a bug, please report svn:……,提示就是class目录下的.svn有毛病。原因可能是在Eclipse编译时,将src目录下的svn配置一起编译到了class文件中,并且在编译时先会删除class中的内容,再编译,这就导致了本地配置与配置库上不一致。需要注意的是,请不要将动态生成的目录添加到SVN,否则其他人Check out的之后,再Update容易出错,例如class目录,不需要提交上去
[b]7、svn:need-lock属性[/b]
可以用来在文件(例如,对二进制文件非常有用)上强加排斥锁。一个定义了svn:need-lock属性的文件一次只能被一个人修改。当该文件被检出时,它是只读的。如果你想修改该文件,你需要首先使用"Team>Lock"菜单选项。之后,使用"Team> Unlock"释放该文件,或仅提交你的变化,也会释放锁,但别人的文件还是只读的,只有别人在获取了锁之后,再能修改该文件。其实该属性以一种强迫的属形势让用户在修改前一定要选获取锁,再能修改该文件,这样就不需要等到提交时再发现早已被别人锁住了。
[b]8、Tag和Branch[/b]
在Subversion中,很容易创建新的tag和branch。你可以使用tag来标识一个特定的版本(使用一种可读的名字,例如"Release 1.0");而一个branch用于新的开发工作而不影响主源码基(称作trunk)。在一个branch上的开发仍会继续进行,直到开发者已经为把变化集成回主trunk作好准备。
在Subversion中,branch和tag都是通过制作给定修订的一个虚拟副本(以另一个名字和/或另一个目录)创建的。在常规情况下,branch存储在branches目录下,tag位于tags目录下,尽管在实践中为了满足你的工程你可以使用自己的任何定制。
从Eclipse中,"Team>Branch/Tag"菜单能够使你创建branch和tag。其中,Browse按钮提供了一种方便的方法来查看有哪些branch和tag存在于仓库中。
当你使用"Team>Switch"创建成功一个新的branch或tag时,你可以非常容易地在branches之间进行切换。无论何时你切换到一个不同的branch(或返回到trunk),Subversion将仅更新文件(它需要保持你的当前工作的副本与目的branch之间的同步)。
[b]二、SVN协同开发中的规范:[/b]
[b]1、先更新,再提交[/b]
如果别人和自己更改的是同一个文件,那么update时会自动进行合并,但如果修改的是同一行,那么合并时会产生冲突。
更新时注意所更新文件的列表,如果提交过程中产生了更新,则也是需要重新编译并且完成自己的一些必要测试,再进行提交。
[size=xx-small][b]2、多提交[/b]
每次提交以几小时为单位。在开发功能模块的时候,可以每完成一个小细节功能的测试,就提交一次,在修改bug的时候,每修改掉一个bug并且确认修改了这个bug,也就提交一次。
[b]3、不要提交不能通过编译的代码[/b]
代码在提交之前,首先要确认自己能够在本地编译。如果在代码中使用了第三方类库,要考虑到项目组成员中有些成员可能没有安装相应的第三方类库。项目经理在准备项目工作区域的时候,需要考虑到这样的情况,确保开发小组成员在签出代码之后能够在统一的环境中进行编译。
[b]4、每次提交必须书写明晰的注释[/b]
明晰的标注要能够概要的描述所提交文件的信息,让项目组其他成员在看到标注后不用详细看代码就能了解你所做的修改。
[b]5、提交时注意不要提交本地生成的文件[/b]
例如eclipse中的.classpath文件,Windows生成的缩略图Thumbs.db,项目编译生成的临时文件.obj, .class等等。如果项目中没有进行这方面的配置来强行禁止提交这样的文件,请自觉不要提交这样的文件。提交了这样的文件后,别人在更新后就可能与本地的环境冲突从而影响大家的工作。
[b]6、不要提交自己不明白的代码[/b]
代码在提交入SVN之后,你的代码将被项目成员所分享。如果提交了你不明白的代码,你看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。因此在引入任何第三方代码之前,确保你对这个代码有一个很清晰的了解。
[b]7、慎用锁定功能[/b]
在项目中要慎用锁定的功能,在你锁定了一个文件之后别人就无法继续修改提交该文件,虽然可以减少冲突的发生率,但是可能会影响项目组中其他人员的工作。平时只有在编辑那些无法合并的文件(例如图片文件,flash文件等)时,才适当的采用锁定操作。[/size]