SVN提交小结
在我们用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提交小结的更多相关文章
- SVN使用小结
SVN是Subversion的简称.是一个开放源码的版本号控制系统.在它的管理下,文件和文件夹能够超越时空的限制,权且当作一种奇妙的"时间机器"吧. 基本功能 版本号控制 作为一个 ...
- svn 提交代码报错
svn 提交代码报错 最近新安装了TortoiseSvn 1.92,在上传代码,其中有新增加的文件,出现如下错误: 解决方法: 1.用vs生成patch文件 2.生成的patch文件中讲nonexis ...
- iOS 之 SVN提交错误:"XXX" is scheduled for addition, but is missing
今天使用SVN提交项目时,出现了这样的提示:"XXX" is scheduled for addition, but is missing.(无关紧要的东西用XXX代替). 看报错 ...
- 使用phpstorm来进行svn提交
macbook上找一款好用的免费的SVN真是难呀,要么就是非常模糊的画面,本想用Xcode的,但是折腾了一会想打开一个php项目文件夹,不会搞.最后想还是用phpstorm吧.没想到还挺好用的. 首先 ...
- 【转】SVN提交一般原则
写在前面: 最近, 跳槽了. 来到了一家感觉QIAN景不错的创业公司. 由于是开始, 规模比较小, SVN的管理工作, 也有我来承担. 今天发生了一些相当不愉快的事情, 就是因为一个同事, ①签入代码 ...
- linux svn 提交文件时强制填写备注
很多程序员不爱写注释,特别是svn提交的时候,文件做了什么修改都没有一个简单的备注,往往都是直接提交,这样是非常不利于团队开发的.所以就有了svn提交的时候,强制修改文件的备注. 步骤如下: 1.先找 ...
- SVN提交碰到的问题奇怪的问题
svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了. 错误如下: 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.d ...
- svn 提交失败
刚刚使用SVN 提交代码时提示失败. svn: Commit failed (details follow):svn: Can't open file '/home/svn/project/db/tx ...
- svn提交时强制添加注释 (转)
SVN提交时,如果没有注释,在查阅历史时,会非常不方便.因此我们需要有一个让程序员提交代码时,强制添加注释的规则.下面看看在SVN中怎么实现. 1. 推荐使用VisualSVN作为服务端(免费下载地址 ...
随机推荐
- LOJ#3087. 「GXOI / GZOI2019」旅行者(最短路)
题面 传送门 题解 以所有的感兴趣的城市为起点,我们正着和反着各跑一边多源最短路.记\(c_{0/1,i}\)分别表示正图/反图中离\(i\)最近的起点,那么对于每条边\((u,v,w)\),如果\( ...
- RabbitMQ Java实例
引入RabbitMQ的jar包 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amq ...
- Python 去除列表中重复的元素
Python 去除列表中重复的元素 来自比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2 还 ...
- Python Django 的学习资料
十分有用的链接: 链接1:http://www.cnblogs.com/wupeiqi/articles/5433893.html (银角大王) 链接2:https://www.cnblogs.c ...
- eclipse中导入SVN项目步骤
1.eclipse中安装SVN插件 在线安装步骤: (1)点击 Help --> Install New Software...(2)在弹出的窗口中点击add按钮,输入Name(任意)和Loca ...
- 扩展中国剩余定理(扩展CRT)详解
今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面) 中国剩余定理是用于求一个最小的$x$,满足$x\equiv c_i \pmod{m_i}$. 正常的$CRT$ ...
- redis允许内网访问
如题有A.B两台服务器. A服务器上装有reis,内网IP:192.168.0.1 B服务器需要访问A服务器上的redis 一.修改A服务器上redis.conf文件 bind 192.168.0.1 ...
- Spark之Scala学习
1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.t ...
- Java之集合(八)HashMap
转载请注明源出处:http://www.cnblogs.com/lighten/p/7338372.html 1.前言 本章介绍Java中最常用的一个集合类HashMap,此类在不同的JDK版本有不同 ...
- 【Java并发编程】:守护线程与线程阻塞的四种情况
守护线程 JAVA中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的运 ...