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作为服务端(免费下载地址 ...
随机推荐
- fastadmin的页面是如何生成的?
第一步: 访问URL http://www.fastadmin.cc/admin/mydir/test/index?addtabs=1 对应的方法是admin模块,controller文件夹下的myd ...
- You can also run `php --ini` inside terminal to see which files are used by PH P in CLI mode
在php.ini中打开extension=php_fileinfo.dll 就可以了
- FunDA(13)- 示范:用户自定义操作函数 - user defined tasks
FunDA是一种函数式的编程工具,它所产生的程序是由许多功能单一的细小函数组合而成,这些函数就是用户自定义操作函数了.我们在前面曾经提过FunDA的运作原理模拟了数据流管道.流元素在管道流动的过程中被 ...
- linux文件的硬连接和软连接
建立软连接:ln -s 原路径 目标路径 原理示意图: 特点: 1. 相当于win中的快捷方式 2. 删除链接文件,源文件不受影响 3. 删除源文件,链接文件失效 4. ...
- js创建对象方法
1.对象字面量 let xys={ name:'xys', age:22, height:177 } console.log(xys.age) //22 2.使用new操作符和构造函数 1 ...
- 二叉排序树的理解和实现(Java)
二叉排序树的定义和性质 二叉排序树又称二叉排序树.它或者是一个空树,或者是一个具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值 若它的右子树不空,则右子树上所有结点 ...
- UBUNTU下MONGODB出现PHP Fatal error: Uncaught exception 'MongoConnectionException' with message 和 Authentication failed on database 'admin' with username
MONGO 远程连接服务器,出现: PHP Fatal error: Uncaught exception Stack trace:# /var/www/data/update_data.php(): ...
- 【数组】Product of Array Except Self
题目: iven an array of n integers where n > 1, nums, return an array output such that output[i] is ...
- css自动适应宽度
.itemContent { background-color:#F0F0F0; padding:3px 11px 11px 11px; text-align:justify; text-justif ...
- 原生js动态添加style,添加样式
原生js动态添加style,添加样式 第一种 var style="[assign-url='"+str+"']{display:initial}"; var ...