主分支同步到分支:
1.当主分支有提交时,需要将主分支的改动同步到各个分支;
2.分支merge需要切换到目标目录,如果是主分支同步到分支,则分支为目标目录;
3.在目标目录中右击选择merge:
在URL to merge from中选择要merge的目录,这里选择主分支;
选择需要合并的范围,因为svn的版本号是累计加1的,所以主分支的分支NO不一定是连续的,只要选择上次同步后的所有提交记录范围,如果没有同步过则以第一次拉分支的分支NO开始到最后一次提交的所有记录进行同步。
分支合并到主分支
当分支任务完成后,需要合并到主分支,需要注意的是分支合并到主分支之前最好做一次同步操作,保证主分支的改动都同步到了分支中,否则会引起冲突和文件丢失。
分支合并到主分支选择“merge two different tree”选项,即合并两个不同的tree。
合并步骤:
这个选项的意思是比较某个提交范围内的所有改动,将不同的地方合并到当前目录分支中。如果选择的revision范围内有冲突的地方还是会冲突的,有些网上说法“如果有冲突的地方以分支的为准”是不对的。
详细:
1.如果主分支的版本选择的起始版本号是最后一次同步到分支的版本号,那么如果主分支没有其它改动则不会出现冲突;如果有改动则有可能冲突。
2.如果主分支的版本选择的是最有一次同步之前的版本号,则从该版本号开始到最后一次同步到分支的所有提交都会冲突,相当于两边有一模一样的代码,所以会冲突。
3.如果主分支的版本选择的是Head版本,如果Head版本和最后一次同步之间有新的提交,则这部分提交的改动则会以分支里的代码为准。
总结:
Merge two different tree选择的分支的起始版本和分支的结束版本,用于比较的是这个范围区间的提交比较,由于SVN是累计+1的版本递增的方式,所以起始分支选的版本号后的记录以及结束分支选的版本号之前的提交记录会参与比较。上面第3点如果选择的起始版本高于未同步的代码版本,则那部分代码不会参与比较,所以这部分的提交对于分支来说是不可见的,那么分支就会当做从分支创建开始到该点该文件没有被修改,所以直接以分支的内容为准。即如果是内容改动,则全部变为分支中的内容,本地主分支的内容会被丢失,如果是新增的文件如果分支中没有则本地会删除。如果选中的起始版本后有未同步的内容则会和普通的合并一样,有冲突就会冲突,没冲突就合并内容,然后本地在提交生成新的版本号。
注意以下几点:
1.分支和主分支都得全部提交。
2.主分支有改动需要及时的同步到分支,避免差异太大(比如文件名或类名修改),最后merge工作很复杂。
3.分支合并到主分支时,如果主分支有新改动没有同步到分支的将会被分支的内容覆盖,即修改的内容丢失,新增的文件删除!