在工作使用中,对于项目的操作不仅仅是项目的提交和更新,更多的是创建项目的分支进行分模块开发、将已经开发完成的模块分支合并到主干项目等操作。
本文主要记录如下操作
开发项目不可能也不允许在主干项目上进行功能的开发、修改等操作,正确的打开方式是在主干上创建分支项目,然后在分支项目上进行各个模块功能的开发和修改,最后将分享项目合并到主干,完成功能的开发。
在项目名称上右键–>Subversion–>Branch or Tag
注意:在创建分支项目之前,需要将主干项目(或被创建的项目)的修改内容进行提交,避免在创建分支项目时产生错误。
在分支创建界面,分为复制来源、复制路径、提交信息三部分。
复制项目来源:
1.复制本地项目作为分支项目:以当前的本地项目为模板,复制一份作为分支项目存放于服务器。
2.复制服务器上的项目作为分支项目:选择服务器上某个项目为模板,复制一份作为分支项目存放于服务器。如果不想使用当前最新的项目作为分支项目,则点击Specified选择需要作为分支项目的版本。
分支存放路径:
1.放在当前项目下:将创建的分支项目内容放置于 当前项目SVN项目库/项目名称/branch/分支名称文件夹下。分支项目内容可以存放在三个位置:trunk、brunch和tag。其中,trunk存放主干项目内容,branch经常用于存放分支项目,tag主要用于存放阶段性的项目文件。
2.放在所选择的服务器路径下:如果不想放在系统指定的文件夹下,可以选择任意文件夹存放分支项目内容。
提交信息:
填写说明信息,便于之后的查找
推荐:
复制项目来源选择系统默认的方式即可。
分支存放路径选择系统默认路径,如果没有默认路径,建议选择branch路径,并填写分支名称。
建议填写提交的说明信息,便于之后分支合并操作的版本查找。
对于是否勾选创建完成后自动切换到分支项目,依照个人的习惯选择,我一般不进行勾选,在创建完成后手动切换分支。
创建完成分支以后,如果需要在分支上进行功能上进行功能的开发,则需要先将项目切换到分支,然后进行开发。如果你已经在上一步勾选了创建完成后自动切换到分支,则无需手动切换到分支。
如果你不确定当前处于哪个分支项目,则可以根据如下操作查看当前分支名称。
注意:在切换分支时,需要先将当前项目进行代码提交,提交完成后再进行分支切换。
在项目名称上 右键–>Subversion–>Update Directory,与更新项目的操作基本一致
勾选切换分支后,可以选择分支进行切换,包含trunk、branch和tag,一般在创建分支时,将分支存放于branch中,点击branch后即可显示分支列表。
注意:如果当前的分支名称为你需要切换的分支名称,则不需要切换,当前项目即为你需要的分支项目。
如果选择branch后不存在需要切换分支,则点击Refresh Branchs刷新。当前我已经创建了v1分支,这里可以根据自己的情况进行分支的命名。
选择v1分支后,下面的URL路径也会转变为服务器上的v1分支路径地址,点击后即可切换至v1分支。
分支项目开发或修改完毕之后,最终还是要合并到主干项目中,完成功能的增加或修改。同时,主干项目的修改也要合并到分支中,更新分支的代码文件。
1.分支合并到主干
注意:
1.在合并数据时,建议切换到主干项目,然后将分支合并到主干。
2.在合并数据时,需要先将分支数据进行提交,避免合并分支时产生错误。
在项目名称上 右键–>Subversion–>Integrate Directory,打开分支合并界面。
分支合并界面有如下几个方面:
Source1:这里是将分支合并到主干,因此source1为主干分支,这里默认为最新版本,需要选择被合并的版本才可以。
Source2:将分支项目合并到主干,source2为分支项目,一般选择默认的最新版本即可,如有需要,也可以选择指定的版本。
注意:因为在分支文件进行功能开发时,主干项目可能也进行了代码的增加、修改等操作,最新版本不一定是创建分支时的版本。因此在合并文件时,需要选择创建分支时版本,在创建分支时做好标记,便于合并项目。
需要选择项目的版本时,点击Specified,然后查看版本列表,选择相应的版本。
选择需要合并的主干版本后,会在合并分支界面显示所选择的版本号。
点击确定后既可以合并分支到主干项目中。
合并到主干项目后,这是只是将分支项目合并到本地,暂未提交到SVN服务器,一定要提交主干项目到SVN服务器才可以。
2.主干的更新合并到分支
注意:
1.在合并之前,将主干和分支的代码进行提交
2.这里与上面的合并相反,建议先将项目切换至v1分支,然后进行切换
这里将分支作为被合并的项目,主干作为合并的项目进行代码的合并。
这里以v1分支为例,将主干数据更新到v1分支中。
切换导v1分支,在项目名称上 右键–>Subversion–>Integrate Directory,显示合并界面。
这里是将主干的数据更新到v1分支中,因此Source1为v1分支,Source2为主干。如果有需要,可以选择相应的资源项目的版本号,合并相应的版本。合并完成后,v1分支即可获取主干的最新代码,进行开发或修改工作。
上面说的为分支项目合并到主干中和将主干数据更新到分支,在日常操作中,也存在着分支之间的项目合并。
如存在音视频功能的模块,音频和视频分离开发。开发完成后,音频和视频分支进行合并,完成后将数据合并到主干,进行最终的测试。
进行分支之间的合并分为两种:
1.在主干项目上创建分支,然后进行分支之间的合并。
2.在主干上创建一个分支,在此分支上创建另一个分支,然后进行分支之间的合并。
1.在主干项目上创建分支,进行分支合并
在创建分支时,最好在分支创建前做好说明信息的标记,便于最后将分支合并到主干项目中,也便于分支合并时查找相应的版本数据。
创建分支的方法这里就不再多说了,如果忘记了,请查看本文的第一部分。此示例中创建v2和v3分支展示分支之间的合并。
注意:在主干项目上创建分支之前,需要确认当前分支为主干项目。如果在其他分支上创建的项目,可能在将来合并时存在某些未知问题。
1-1.切换到v2分支,在v2分支中增加代码文件,然后提交文件到SVN服务器。
1-2.切换到v3分支,在v3分支中增加代码文件,然后提交到SVN服务器。
1-3.将v3分支合并到v2分支,选择相应的版本,进行分支合并。
注意:这里将v3分支合并到v2分支,将v3分支的最新版文件合并到v2分支的特定分支版本中。这里的特定分支版本为从主干中创建v2分支的版本,避免v3分支合并到v2分支时产生覆盖的问题。
在合并完成后,将v2分支进行提交,完成分支合并。如果要进一步进行合并到主干,则按照之前的步骤进行合并即可。
2.在分支上创建分支,进行分支之间的合并
这种情况主要用于多功能的开发。例如:开发的APP是个教育类的APP,有一个课程学习模块,包含视频播放和练习题两个部分。这样我们就可以在主干上创建一个课程学习的分支,课程学习分支用于开发视频播放功能。同时在此分支上创建练习题分支,实现练习题功能。完成后将练习题分支合并到课程学习分支,最后合并到主分支中。
注意:在分支之间合并时,注意选择合并的版本号。
这里的操作类似于将分支合并到主干。
2-1.创建v4分支,增加新的文件夹和文件,并提交文件。
2-2.在v4分支上创建v5分支,增加新的文件夹和文件,提交文件。
注意:当前分支创建是在v4分支的基础上创建v5分支。
2-3.在合并分支时,注意选择相应的合并版本。
注意:
1.在分支合并时,需要注意选择相应的合并版本。
2.在分支合并时,注意先将当前分支数据进行提交后再进行提交。
选择完成后,即可将v5分支合并到v4分支中,注意合并完成后将v4分支进行提交。
PS:分支之间的合并,在日常的开发工作中并不常见,主要是本人没怎么使用过,不排除大佬们经常使用此功能。所有的SVN合并功能,在合并操作之前,一定要注意进行当前代码文件的提交,避免产生重大的错误。
在进行分支合并(分支合并到主干和分支之间的合并统称为分支合并)、项目文件更新、代码文件上传时,经常遇到代码冲突的问题,这主要是由于自己或其他人员修改了代码文件并提交服务器后,服务器上的文件与本地文件不一致导致的。解决文件冲突,才能更好的与其他人员协作开发。
当前示例如下:
1.在主分支上建立Test文件夹,创建TestFile文件。
2.在TestFile文件中增加几条数据,然后提交服务器后,创建v6分支。
3.在v6分支中的TestFile文件中修改其中一条数据内容,提交到服务器。
4.在主干中的TestFile文件中修改相同的一条数据内容,提交到服务器。
5.将v6分支合并到主干,出现代码冲突,进行解决。
1.主干中增加Test文件夹,并增加TestFile文件。
2.提交服务器,创建v6分支。
3.在v6分支中修改其中一条数据,并提交到服务器。
4.切换到主干中,修改相同的数据,提交到服务器。
5.将v6分支合并到主干,出现冲突文件,进行冲突解决。
由于我们在主干和v6分支中,都对于TestFile文件进行了同一个数据的修改,因此进行分支合并的话,必然会出现合并冲突的问题。
注意:这里是将同一个文件中的同一个数据进行修改,因此才会导致冲突的产生。如果只是对于v6分支进行数据修改,而主干没有进行同一个数据的修改,那么就不会造成冲突的产生。
冲突产生的原因在于:同一个文件在两个不同的位置经过两次完全不同的修改(不是在同一个文件上经过两次修改),造成文件无法合并的问题。
在v6分支合并到主干时,产生冲突问题。
点击合并后产生冲突问题。
显示冲突的比对和解决界面。
这里的示例为将v6分支合并到主干,所以会显示本地数据、服务器数据和v6分支数据三部分。其中,左边的界面显示的为当前的本地代码,中间为服务器版本的数据,右边为v6分支的数据。因为当前修改的为同一个数据,因此在分支合并时,会产生代码冲突。
在图中可以看出,在左右两个界面,都存在一个覆盖当前数据的按钮操作。如果想要将左边的数据作为准确的数据,则点击左边的覆盖按钮,将a=101覆盖到中间数据;如果将中间界面的数据作为准确的数据,则不需要改动;如果将右边的数据作为准确的数据,则点击右边的覆盖按钮,将a=106覆盖到中间。选择完成后,点击Apply按钮即可。如果不想进行冲突解决,则点击Abort按钮即可放弃冲突解决。
除了合并分支出现冲突外,在上传代码文件、更新代码文件等操作中,也会因为修改同一代码文件导致代码冲突。解决的方法和分支合并的方法类似,这里不再细说。
注意:在处理完成代码文件冲突后,一定要提交代码文件,避免本地文件和服务器文件不一致导致出错。
AndroidStudio中SVN的常用功能就是这些,比较主要的功能是创建各种功能开发分支和分支之间的合并,便于快速开发使用。这里只是简略的记录下自己日常使用的过程,待后期忘记操作时进行查阅。