前言:
经常从SVN上取最新代码下来后发现编译过不去,查找提交log找到之前提交的人,了解其提交代码的流程后,发现SVN代码提交流程有点问题. SVN代码提交虽然简单,但是如果没严格按照步骤来的话,很容易出错,出现代码覆盖,遗漏提交的情况。现在整理一个SVN提交代码流程的精简的版本。
有2种方法,推荐方法1。
方法1 通过本地SVN代码库中转提交:
1。本地SVN代码库更新
为了方便代码提交,建议本地维护一个与SVN对应的,只用来存放最新代码的本地SVN代码库(不做开发用)。其作用主要是用来在每次代码合并前,先从SVN上取最新代码。
(代码更新完毕后,如果修改不多,合并时间不会太长,则可以把代码库锁定:代码库文件夹右键--TortoiseSVN--Get lock...;如果修改太多,合并时间比较长,建议不要锁库)
2。合并本地开发库代码到本地SVN代码中
本地开发库代码可能是我们在一个月前,半个月前与SVN同步过,但是现在可能不一样了。我们现在要做的,是把本地开发库中的代码合并到前面1中的那个SVN代码库中去。
这里有一个非常重要的原则:合并代码的时候,我们只处理那些我们确认是我们自己新增的,修改的,删除的代码到本地SVN库中。任何不是我们做的修改,我们一律不要去动它。
比如有一段代码我们我们开发的时候没有,但是现在本地SVN库里有,那我们不要去删除它,而是忽视它,因为它应该是其他人新增上来的。
(说明:如果碰到修改冲突,这个不多,如果是遇到这个情况,应该考虑如何把我们的修改加入到最新代码上去)
3。编译本地SVN库代码
编译通过了才能提交到。这个可以防止提交遗漏,保证其他人从SVN上取下来的文件都可以编译通过。
4。合并本地SVN代码到服务器SVN代码库中
现在,我们本地SVN代码库中已经有了我们本地要提交的代码了。
如果我们之前有锁库了,则可以直接就把代码提交上去了(提交时记得写上日志,以便后面修改调阅)。
如果之前没锁库,这个时候还不能马上就提交了。因为这个时候可能其他人又提交代码了。所以,我们要先把这个代码与服务器SVN的代码再diff一下,以确保要提交的内容就是我们修改的内容。
说明:如果发现有变动,则重复上面1,2,3,4操作。
5。提交完毕
如果有锁库,则要进行解锁。
方法2 直接在开发库提交:
1。直接更新本地开发库代码
更新过程中,可能会发现不少提示冲突的。
更新完毕,如果修改不多,像上面方法1的1一样,可以把库锁定。
2。备份冲突
逐一找出提示冲突的那些文件(比如test.cpp),ctrl+c,ctrl+V一下(多出个 复件 test.cpp来),把test.cpp删掉
3。解决冲突
等把所有有冲突的文件备份过后,重新更新所有代码,这时那些有冲突的文件都将回到目前最新的版本中。
把备份的文件(复件 test.cpp)和目前最新文件test.cpp进行对比,把属于我们的修改的代码合并到test.cpp中去。当然,如果功能冲突,则要考虑我们的修该该做如何变动。
如果仅仅是修改位置冲突,则挪下位置就可以了。
4。编译代码
编译有问题则要进行修改。
5。提交代码
如果之前有锁库,则可以填上日志,直接提交。
如果没锁库,则在提交之前还要再diff一下,以确保要提交的内容都是我们自己修改的内容。
PS: 如果中间又有人做修改,则重复1,2,3,4,5操作。
6。提交完毕
如果有锁库,则要进行解锁。
方法1和方法2的比较:
方法1 通过本地SVN代码库中转提交
缺点: 浪费空间
优点: 比较安全。比如我们在进行提交到服务器SVN代码库中,如果操作失误(冲突合并错了),没关系,重新从本地开发库合并到本地SVN中再进行比较提交。
方法2 直接在开发库提交
缺点: 1)比较危险。因为我们是直接对本地开发库进行操作,万一在提交过程中发现错误了(比如冲突合并错了或代码删错了),则可能就没的恢复了。 2)不容易发现提交遗漏的情况.因为编译的时候,由于是代码都在本地,不容易发现代码提交遗漏
优点: 提交比较快,不用通过中转
所以推荐使用方法1。
附注:一般,我们提交代码时,为了减少合并冲突,最好都在群里告知项目组其他同学我要提交代码了,这样别人可以有意避开