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文件,用于存储当前项目的用户配置,可以使用记事本打开。例如:打开ASP.NET项目的.csproj.user文件后会看到一项:<StartAction>CurrentPage</StartAction>,它表示当按F5开始调试,或者Ctrl+F5开始运行时,首先打开的是VS的当前页。

2.2 *.suo

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

3. 排除方法

在服务器上直接将以上的文件或者文件夹直接排除掉即可,不要幻想各个团队成员会自己在客户端排除掉:

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

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

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

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

二、提交的几个原则

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

1.1 先Update整个解决方案

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

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

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

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

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

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

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

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

2.“微提交”

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

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

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

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

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

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

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

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

时间: 2024-10-12 18:47:58

SVN提交小结(转)的相关文章

SVN学习小结

SVN是Subversion的简称,是一个开放源代码的版本控制系统,在它的管理下,文件和目录可以超越时空的限制,权且当作一种神奇的"时间机器"吧. 基本功能 版本控制 作为一个版本控制系统,SVN能够及时的更新版本,将文件存放在中心版本库里.这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节. 备份 SVN会对你的每一次操作和更改进行备份(为了节省占用空间,多采用增量备份).更改错误.误删.

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

SVN提交时,如果没有注释,在查阅历史时,会非常不方便.因此我们需要有一个让程序员提交代码时,强制添加注释的规则.下面看看在SVN中怎么实现. 1. 推荐使用VisualSVN作为服务端(免费下载地址:http://www.visualsvn.com/).安装完毕后,打开VisualSVN Server管理器,在版本库上点击"属性",选择"Hooks"选项,选中"Pre-commit hook"后,点击"Edit".(如下图)

【转】SVN提交一般原则

写在前面: 最近, 跳槽了. 来到了一家感觉QIAN景不错的创业公司. 由于是开始, 规模比较小, SVN的管理工作, 也有我来承担. 今天发生了一些相当不愉快的事情, 就是因为一个同事, ①签入代码无法编译, ②签入代码不写注释, 找不到变更记录. 找来这么一篇文章放到博客上, 希望能帮助看到的各位. =======================割==割===割========================= 最近在合作开发,用SVN给代码和文档做版本控制,由于是刚学会使用,总是问题多多:

svn提交时强制添加注释

负责前端开发的同事提出需求,svn提交时必须添加注释,否则有可能不知道代码是谁提交的. 搭建svn服务器时,用的是CollabNetSubversionEdge.添加用户,管理工程权限都挺方便.让某个工程在提交时添加注释,需要在svn的hooks目录下,新建一个pre-commit的文件并给它可执行权限. 代码如下: #!/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/local/csvn/bin/svnlook LOGMSG=$($S

Linux下svn提交文件后自动同步更新到网站目录

有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkout代码,例如我的目录是/data/www/test svn co https://127.0.0.1/test/trunk//data/www/test/ 注意,这是因为有时我会在服务器上直接修改代码,所以用checkout,如果不需要,可以用export,此指令不带.svn版本文件. 迁出代码后,

svn 提交时出现

svn提交时出现: /usr/bin/svnlook: error while loading shared libraries: libaprutil-1.so.0 这两天在svn服务器重新安装apache了,然后提交的时候就出现了如上错误,经过一顿剖析 出现这个错误的原因就是svnserver在编译时是加了apache支持的,现在无法找到apr-util库,一般情况下我们将apr-util的lib目录加入到系统的lib路径中就可以了,比如我服务器的apache的apr和apr-util的安装

微信开发之SVN提交代码与FTP同步到apache的根目录

SVN是协同开发的,版本控制器,就是几个人同时开发,可以提交代码到SVN服务器,这样就可以协同开发,一般是早上上班首先更新下代码,然后自己修改代码 工作一天之后,修改代码之后,下班之前,更新代码,然后提交代码. 现在问题来了,微信开发比如把代码提交到自己的服务器,然后运行起来,这样微信公众号,才能运营相应的功能. 那么SVN服务器的代码是怎么才能跟Apache的www目录同步呢?其实这个是SVN与FTP同步的实现. 就是SVN提交代码到SVN服务器之后,然后SVN服务器检测到发生变化,马上利用钩

详解SVN提交更新七大准则

本节向大家讲解一下SVN提交更新的一些准则,上一节我们学习了SVN提交时遇到的一些问题及解决方法,这里和大家分享一下SVN提交更新的一些准则,欢迎大家一起来学习SVN提交更新问题. 记得有一次提交SVN更新,将Eclipse自动生成的文件也一并提交了,结果导致组员update之后项目无法工作. 某日看了一篇关于SVN提交更新的一些建议,粘过来,并做了一些裁剪和修改,如下: ①负责而谨慎地提交自己的代码 SVN更新的原则是要及时更新,及时提交.当完成了一个小功能,能够通过编译并且并且自己测试之后,

SVN Hook造成SVN提交速度慢的问题

单就个人感情来说,我其实喜欢git.但显然subversion才是更普遍的版本控制管理工具,适合用在团队开发中. 那么,有一个很常见的需求就是把工程师提交的代码,更新到htdocs目录,这时候需要用svn hook,简单做法就是写一个post-commit hook: svn update /var/htdocs/ 但当svn目录越来越大,文件越来越多的时候,svn提交也会越来越慢.因为每一次的提交都会造成整个svn的更新. 这个时候,或许可以稍微变通一下,尝试用svnlook只更新那些有变化的