在我们用VS进行项目合作开发的过程中,SVN的提交控制是至关重要的,由于版本冲突造成的各种麻烦咱们已经遇到的够多了。所以,总结他们的经验教训,给我们也给其他人做个提醒。下面的第一部分是需要在正式开发之前需要做的,第二部分是开发的过程中需要注意的。

  一、排除不必要的提交

  1.将编译性的文件排除在提交之外

  由于编译性的文件(包括obj文件夹和bin文件夹)并不是源文件,它完全可以通过存储的源文件生成,一次提交的话会造成两方面的影响:1. 浪费服务器存储空间 2. 由于每个团队成员编译的结果可能并不一样,大大增加了版本冲突的几率。

    1.1 obj文件夹

    obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。

    1.2 bin文件夹

    bin目录用来保存项目生成后程序集,后置代码类和其他非页面类编译后的DLL。它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径。我们可以通过:项目属性—>配置属性—>输出路径来修改。

  2. 将属于每个用户的文件排除在提交之外

    2.1 *.csproj.user

    .csproj.user文件是一个xml文件,用于存储当前项目的用户配置,可以使用记事本打开。

    2.2 *.suo

    *.suo解决方案用户选项,记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含用户所做的自定义设置,比如VS布局以及项目最后编译的而又没有关掉的文件用于下次打开时用。删除之后,团队成员从服务器下载下来之后再次打开解决方案就会重新生成,所以没有必要进行提交。

  3. 排除方法

  在服务器上直接将以上的文件或者文件夹直接删除,同时要求各个团队成员自己在客户端将它们排除掉:

  右击解决方案文件夹→TorToiseSVN→Settings→General,如下图:

  

  在“Subversion下的”Globalignore pattern ”中添加要排除在提交之外的文件类型(以空格分隔)【bin obj *.suo *.user *.csproj.user】即可。

  也可右击目标→TorToiseSVN→Unversion and add toignore list→文件类型,逐个排除。

  排除后以后再提交整个解决方案,被排除的文件类型都不会被提交:

  

  减少冲突产生的几率,我们可以做双保险:在向服务器上传全新的解决方案之前将以上的5种类型全部删除,然后让团队成员再排除。以后大家在提交的时候按照下面的几个原则基本上就不会出什么问题了。

  备注:在Unversion and add toignore list菜单项中,有针对“****”或“****(recursively)两个选择,选择第一个则仅针对本地资源进行排除;若选择带recursively的菜单项,上传至SVN服务端,其他人在获取最新版时,则会自动将相关资源排除;

  二、提交的几个原则

  1.先更新,再生成解决方案,最后提交。

    1.1 先Update整个解决方案

    团队成员可能会修改解决方案中的多个文件,所以更新的时候我们没有必要(也不建议这么做)去单个项目或者文件去更新,否则可能更新下来的代码由于只是部分导致生成的时候出现错误。

    1.2 然后保证在提交之前生成的解决方案没有错误

    这个是提交之前最为重要的一步,一旦某个成员提交上了这种类型的代码,那么团队中的其他人都将无法进行调试。

    1.3 最后再提交,而且只Commit自己修改的类

    只提交自己修改的类或者其他文件,避免因为误操作别人的类导致解决方案中的出错。其实可以通过SVN的权限控制各个成员负责的部分,可以精确到单个类(但这种方法也有不少局限性),这样就可以大大减少由于误操作引起的不必要的麻烦。

    对于新添加的类、文件或者文件夹等资源,我们应该将它们所在的层进行提交(当然也可以对整个解决方案进行提交,为了减少出错的几率采用此方法),提交的时候勾选上*.csproj文件(默认是勾选的)和自己修改过的:

    

  这样就可以解决下载的解决方案中新建的这个文件夹未被包含在项目中的问题。

  而对于新添加的项目,则应该提交整个解决方案,方法跟上面类似。

  2.“微提交”

每实现一个小功能或者几段代码,生成没有错误之后就直接提交,也叫“保存提交”。这样可以通过SVN的版本控制,最大程度的减少因为后来的错误导致解决方案大范围修改情况的发生。

  3.未经组长同意,不得擅自使用“get lock”功能

  就是对文件或者文件夹进行“锁定”的功能。只有对于特别重要的,属于只有自己能够修改的并且经过组长同意的才能够使用。否则其他人无法提交该文件或者文件夹。

  4.对SVN提交更新的信息采用明晰的标注(类似在代码里写的注释)

  有了这个信息之后我们如果某个版本出现了错误就可以清晰的看到是因为谁修改了哪些部分导致的,很方便调试还原。

  5.不要提交自己不明白的代码

  代码在提交入SVN之后,你的代码将被项目成员所分享。如果提交了你不明白的代码,你看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。因此在引入任何第三方代码之前,确保你对这个代码有一个很清晰的了解。

  以上几点做到之后,关于版本提交的问题基本上就能解决了。在实践的过程中可能还会有其他问题的出现,但只要我们能够清楚这些问题的来源,就能够比较快速、正确的处理掉。当然,还是需要大家去养成一个良好的提交习惯才能避免给大家带来麻烦。

参考链接:https://blog.csdn.net/wlccomeon/article/details/20398923

SVN提交小结的更多相关文章

  1. SVN使用小结

    SVN是Subversion的简称.是一个开放源码的版本号控制系统.在它的管理下,文件和文件夹能够超越时空的限制,权且当作一种奇妙的"时间机器"吧. 基本功能 版本号控制 作为一个 ...

  2. svn 提交代码报错

    svn 提交代码报错 最近新安装了TortoiseSvn 1.92,在上传代码,其中有新增加的文件,出现如下错误: 解决方法: 1.用vs生成patch文件 2.生成的patch文件中讲nonexis ...

  3. iOS 之 SVN提交错误:"XXX" is scheduled for addition, but is missing

    今天使用SVN提交项目时,出现了这样的提示:"XXX" is scheduled for addition, but is missing.(无关紧要的东西用XXX代替). 看报错 ...

  4. 使用phpstorm来进行svn提交

    macbook上找一款好用的免费的SVN真是难呀,要么就是非常模糊的画面,本想用Xcode的,但是折腾了一会想打开一个php项目文件夹,不会搞.最后想还是用phpstorm吧.没想到还挺好用的. 首先 ...

  5. 【转】SVN提交一般原则

    写在前面: 最近, 跳槽了. 来到了一家感觉QIAN景不错的创业公司. 由于是开始, 规模比较小, SVN的管理工作, 也有我来承担. 今天发生了一些相当不愉快的事情, 就是因为一个同事, ①签入代码 ...

  6. linux svn 提交文件时强制填写备注

    很多程序员不爱写注释,特别是svn提交的时候,文件做了什么修改都没有一个简单的备注,往往都是直接提交,这样是非常不利于团队开发的.所以就有了svn提交的时候,强制修改文件的备注. 步骤如下: 1.先找 ...

  7. SVN提交碰到的问题奇怪的问题

    svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了. 错误如下: 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.d ...

  8. svn 提交失败

    刚刚使用SVN 提交代码时提示失败. svn: Commit failed (details follow):svn: Can't open file '/home/svn/project/db/tx ...

  9. svn提交时强制添加注释 (转)

    SVN提交时,如果没有注释,在查阅历史时,会非常不方便.因此我们需要有一个让程序员提交代码时,强制添加注释的规则.下面看看在SVN中怎么实现. 1. 推荐使用VisualSVN作为服务端(免费下载地址 ...

随机推荐

  1. Statement与PreparedStatement区别

    1.性能区别 Statement statement = conn.createStatement(); PreparedStatement preStatement = conn.prepareSt ...

  2. Oracle 数据类型 与C#映射关系

    大部分类型的对应关系:原文:http://2143892.blog.51cto.com/2133892/499353 序号 Oracle数据类型 .NET类型 GetOracleValue类型 DbT ...

  3. (转)python 之路,200行Python代码写了个打飞机游戏!

    原文:https://www.cnblogs.com/alex3714/p/7966656.html

  4. Netty核心概念(9)之Future

    1.前言 第7节讲解JAVA的线程模型中就说到了Future,并解释了为什么可以主线程可以获得线程池任务的执行后结果,变成一种同步状态.秘密就在于Java将所有的runnable和callable任务 ...

  5. 维特比算法(Viterbi)-实例讲解(暴力破解+代码实现)

    1.简介 维特比算法是一个通用的求序列最短路径的动态规划算法,也可以用于很多其他问题,比如:文本挖掘.分词原理.既然是动态规划算法,那么就需要找到合适的局部状态,以及局部状态的递推公式.在HMM中,维 ...

  6. ubuntu16.04上Eclipse和hadoop配置

    1.安装Eclipse 1>下载Eclipse 可以以多种方式下载Eclipse,下面介绍直接从eplise官网下载和从中国镜像站点下载,下载把eclipse上传到Hadoop环境中. 第一种方 ...

  7. Eclipse-离线安装Memory Anlysis Tool

    Eclipse版本:Version: Mars.2 Release (4.5.2) 1.从官网下载MAT Memory Anlysis Tool http://www.eclipse.org/mat/ ...

  8. 为android游戏开发-准备的地图编辑器-初步刷地图

    采用多文理混合,单页面支持8张文理进行刷绘

  9. 使用exe4j将java项目打成exe执行程序

    最近用Java写了一个小工具,想将它达成exe执行文件,到时候直接放某个目录下,一执行就能跑啦. 用到的工具: 1.写好的项目:可以是java项目,也可以是java web项目 2.能够打jar的工具 ...

  10. ES6-Object

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...