发新话题
打印

[方案分享] 网站svn管理下项目上线流程方法,,大家给个意见

[方案分享] 网站svn管理下项目上线流程方法,,大家给个意见

不知道这东西,有没有人有需要.我先说说我们的应用.
首先,我们是个集交友,聊天,个人空间,网站游戏为一体的网站,结构比较大,内容比较多.
trunk内一般来说就是webapp和src.

网站的开发一般是一周上线一次.就是把这周更新的内容发布,而不是把所有内容重新放.所以在服务器部署的时候,只需要增量部分.
这个是比较头疼的.因为领导还要求.不仅仅在外网部署时候,能取出本周更新的增量;还要求随时能取出,本周某某小项目的增量.

这第二个需求是为了内容测试服务器用的.每周每个开发负责的小项目提交测试,要求测试人员取他这部分的增量就可以了

所有svn库被设计成了这样.主干,集成分支,功能分支.这三个部分.

主干:这里是全部最稳定的代码
集成分支:里面各个子目录的命名为是:某年某月某周,里面存放这周的全部增量内容(包括修改和新增)的代码
功能分支:里面各个子目录的命名为:项目名_某月某日,里面存放这周这个开发的任何一个小项目的增量内容.当然还有其他用处,后面再说.

上面的集成分支,其实就是功能分支中,这个礼拜所有小项目的集合.

现在说上线流程.
1.某项目完成后,开发把增量部分内容代码提交到功能分支和集成分支内.在往集成分支放的时候,会发现本项目与其他项目是否有共同修改同一个文件的情况.如果有,约定好用其他方式交换代码即可.因为我们的各个项目间一般都不会有共同修改同一个文件的需求,所以我们的这个方案里面几乎都是并行开发的的.

2.测试把功能分支某项目的代码拿出来,部署到测试server.开始测试工作.

3.一周到了末尾,工作人员把集成分支内的东西,部署到外网服务器.

4.外网测试通过,同步外网各服务器,同时将集成分支内的东西覆盖到主干.从此,主干的稳定版本就加入了新的内容.

5.周而复始做上面的工作.

这就是我们的流程.这东西不是我定的.是我的领导订的.我负责把这个计划全面的配置好.我认为这套方案有他的特色.不知道其他人能否给我一些意见.看看有什么改进的地方.
首先说,我认为的缺点:
1.利用svn特色功能极少,通过学习,我个人很崇拜merge功能,和merge记录功能(就是给merge过的目录加属性的那个).认为没有merge的svn应用等于没真正用svn.但是我想了半天,要不违反领导的上面的流程,merge基本不可用.或者说不方便.

2.结构复杂,项目间互通少.这样的方案放在我们公司还好,放在其他的地方可能就不好用了.
优点:
1.直观.非常直观.从库中直接定位到本周的任意项目的代码部分,定位到本周网站所有项目要更新的代码.
2.可回退.如果在周五上线日,决定某一项目不上了.那么所需的就是集成分支下,除了这个项目的全部内容.那么如何取出呢.是试过merge,但是不可以.那么首先删除集成分支下所有东西,然后用程序(我已写好一个java程序)把功能分支下的一个个项目添加到集成分支去(不添加那个不上的项目).虽然看起来麻烦一点,实际操作还是很快的,而且这种事几个月也不见得发生一次.
3.利用上我写的java程序来实现:开发不提交到trunk还能把trunk下工作增量部分提取出来.
原理是,开发在本地的trunk副本工作,但是没有提交权限.他的全部工作内容,可以认为就是副本下显示add和modify和replace的文件.我利用程序,把这些文件,带完整结构的,复制到集成分支某项目目录下.检查无误,提交.确定这个项目是本周上线的话,可以执行我第二个程序,把功能分支下某项目内容的文件全部,带结构的复制到集成分支下.检查无误.提交.如果出现冲突.解决冲突.
    网站把本周所有东西上线后,还是利用我说的第二个程序,把集成分支下本周的所有内容,复制到trunk下.

希望大家可以对这个方案提提意见.看还有什么可以改进的.如果有人需要.我可以把java程序提供出来.

TOP

--集成分支:里面各个子目录的命名为是:某年某月某周,里面存放这周的全部增量内容(包括修改和新增)的代码
--功能分支:里面各个子目录的命名为:项目名_某月某日,里面存放这周这个开发的任何一个小项目的增量内容.当然还有其他用处,后面再说.

我觉得命名不好,功能分支的名字应该和发布时间无关,而是一个功能的描述,考虑如果这个周一个特性没有改完,这个功能分支是保留名称呢,还是改变成一个新的名称?


--1.某项目完成后,开发把增量部分内容代码提交到功能分支和集成分支内.在往集成分支放的时候,会发现本项目与其他项目是否有共同修改同一个文件的情况. 如果有,约定好用其他方式交换代码即可.因为我们的各个项目间一般都不会有共同修改同一个文件的需求,所以我们的这个方案里面几乎都是并行开发的的.

是不是就是说代码会在多个地方同时被修改?如果确实会出现这个情况,建议用外部定义功能,我想这样可以避免出现错误。

1.利用svn特色功能极少,通过学习,我个人很崇拜merge功能,和merge记录功能(就是给merge过的目录加属性的那个).认为没有merge的svn应用等于没真正用svn.但是我想了半天,要不违反领导的上面的流程,merge基本不可用.或者说不方便.

我觉得你说的情况完全还是可以使用merge阿,为什么不行啊?


--2.可回退.如果在周五上线日,决定某一项目不上了.那么所需的就是集成分支下,除了这个项目的全部内容.那么如何取出呢.是试过merge,但是不可以.那么首先删除集成分支下所有东西,然后用程序(我已写好一个java程序)把功能分支下的一个个项目添加到集成分支去(不添加那个不上的项目).虽然看起来麻烦一点,实际操作还是很快的,而且这种事几个月也不见得发生一次.

呵呵,merge是可以做的,反向merge就可以去掉以前提交过的某些东西,只要你各个模块是分别提交的,例如修订10需要去掉,则命令就是 svn merge -c -10

--3.利用上我写的java程序来实现:开发不提交到trunk还能把trunk下工作增量部分提取出来.
原理是,开发在本地的trunk副本工作,但是没有提交权限.他的全部工作内容,可以认为就是副本下显示add和modify和replace的文件.我利用程序,把这些文件,带完整结构的,复制到集成分支某项目目录下.检查无误,提交.确定这个项目是本周上线的话,可以执行我第二个程序,把功能分支下某项目内容的文件全部,带结构的复制到集成分支下.检查无误.提交.如果出现冲突.解决冲突.

没提交之前感觉以后跟踪不方便,因为版本库中没有一个版本和上线版本一致。

感觉你写的程序和我最近写的几个工具有点类似:
http://rocksun.cn/upload-file-changed/

你的整个方案感觉非常不传统,确实浪费了svn的能力,可能还是因为你的各个项目实际上耦合度不大,所以还不会出现太多的问题,否则的话你要处理的特殊情况太多了。
我的Blog,欢迎友情链接:http://rocksun.cn
支持Subversion中文站,欢迎友情链接我们:http://www.subversion.org.cn/
Twitter Me:http://twitter.com/rocksun,可以加入QQ群15161300、11097243(满)和21860927(满),群策群力。

TOP

我前面提到的***如果在周五上线日,决定某一项目不上了.那么所需的就是集成分支下,除了这个项目的全部内容.那么如何取出呢.是试过merge,但是不可以***

老大的回复是这样的:
***呵呵,merge是可以做的,反向merge就可以去掉以前提交过的某些东西,只要你各个模块是分别提交的,例如修订10需要去掉,则命令就是 svn merge -c -10****

我的想法是这样的:我们的项目提交有不确定性.因为集成分支虽然是放了各个项目的集合,但是他的组成从时间上看是没有规律的.一般集成分支可以理解为:
V1:项目1
V2:项目1+项目2
V3:项目1+项目2+项目3
这时候,想不要项目2,比较容易,V2到V1反向合并就行了.
可是我们的集成分支具体情况,通常是这样:
V1:项目1
V2:项目1+项目2
V3:项目1+项目2+项目3
V4:项目1+项目2+项目3+项目1添加一些文件(比如测试发现项目1少图片)
V5:项目1+项目2+项目3+项目1添加一些文件+项目2改bug(测试发现bug)
V6:项目1+项目2+项目3+项目1添加一些文件+项目2改bug+项目4
V7:项目1+项目2+项目3+项目1添加一些文件+项目2改bug+项目4+项目1又改bug
......
这种情况下,当这个礼拜最后一天,决定集成分支里,不要某项目了的话,就不是一个merge命令所能做到的了.除非看日志,把所有有关这个项目的版本都反向合并了.你说对吧.所以在我们这种情况下,我觉得就用不了merge.

TOP

理想状况

其实对于我们的网站模式,我认为理想的状况是这样的:

每个上线周期一开始(如周一),把trunk做1个分支.
全部开发在这一个分支下工作.
如果有人得工作确定不在这个上线周期内完成,那他自己开个分支干活

测试得到项目1完成的消息后,更新分支.将整个项目部署.
项目n完成,或者项目m改bug,诸如此类.测试都拿整个分支得最新版本部署一遍.
====================================================
上面是我个人理解得理想状态.但是放我们公司就不适合了.因为这个项目较大.部署还是要增量部分得内容比较好.再有就是领导要求得回退功能不方便实现.


所以觉得似乎没什么太好得办法了,只能麻烦得用我主题所描述得:
1.trunk副本工作增量部分复制到"功能分支-集成分支",提交.
2.上线后,集成分支内容复制到trunk,提交.

TOP

---这种情况下,当这个礼拜最后一天,决定集成分支里,不要某项目了的话,就不是一个merge命令所能做到的了.除非看日志,把所有有关这个项目的版本都反向合并了.你说对吧.所以在我们这种情况下,我觉得就用不了merge.

merge命令现在支持 -3,-4,-6,这样的方式,呵呵,也就是一个merge现在可以,不过记录当然是很麻烦。

我觉得你特性分支的定义不对,你现在的特性分支不叫特性分支,而是小组分支。真正的特性分支应该是没有完成前,是不能集成到trunk的,所以也一般不会有你说的回退的问题。而你的是小组分支,其实包含了很多特性,不断地集成到主干。

我觉得你在测试的时候,可以手工得到一个版本,而不是复制到trunk,然后从trunk得到一个版本,只有测试通过后,再往trunk上合并,这样感觉比较自然。
我的Blog,欢迎友情链接:http://rocksun.cn
支持Subversion中文站,欢迎友情链接我们:http://www.subversion.org.cn/
Twitter Me:http://twitter.com/rocksun,可以加入QQ群15161300、11097243(满)和21860927(满),群策群力。

TOP

决定了

搞太复杂了.
来简单的.目录就:
trunk
branch
tag

稳定的版本tag里找,
一周开始大家都在trunk干活.用<<如何让TortoiseSVN仅导出新增或修改过(变更过)的文件>>这篇文章提到的方法,取增量内容(当然还可以用管理员老兄的python脚本啦),然后可以把增量部署到server即可.

如果要回退,就用你说的一条merge多个反向的方法.(试过了,果然好用.)

如果有什么项目是不在这个周期上的,让这个项目在branch下,建个分支干活.当下个周期到来了,把分支合并回trunk来即可.(这个就叫特性分支么?)

折腾半天,还是回到经典的方案了.

呵呵,rocksun兄看看这样是不是就ok了.

TOP

呵呵,现在世界清静多了
虽然不严谨,能有效最重要
我的Blog,欢迎友情链接:http://rocksun.cn
支持Subversion中文站,欢迎友情链接我们:http://www.subversion.org.cn/
Twitter Me:http://twitter.com/rocksun,可以加入QQ群15161300、11097243(满)和21860927(满),群策群力。

TOP

水宜生微电解制水杯,水宜生制水,水宜生,0579-87368043

水宜生微电解制水杯,水宜生微电解制水,水宜生,0579-87368043,电解芯,水宜生电解杯价格,微电解制水器,生命源微电解制水器,水宜生,水宜生水杯,水宜生价格,水宜生水杯价格,www.hh303.com
[ur]=http://www.hh303.com]水宜生水杯[/ur]

TOP

xyz软体下载

TOP

TOP

发新话题