作业题目: 团队源代码管理

作业题目: 团队源代码管理

 

参考以下网站中对团队项目源代码管理的十个问题的解析,根据自己项目的实际情况,给出十个问题的答案,并整理成团队博客发表在组长的个人博客上。

 

•       http://www.cnblogs.com/xinz/p/5044037.html 

 

1、你的团队的源代码控制在哪里?用的是什么系统?

我们的项目在github上托管,通过GitHub的客户端就可以进行各种源代码控制,比如显示与查看代码更改内容,更改历史,以及代码回滚等功能。针对这种多人多任务的开发模式,我们认为git是再好不过的选择,于是我们打算采用这种方式。

2、一个代码文件被签出之后,另一个人可以签出这个文件,并修改么?有几种设计,各有什么优缺点?

例如,签出文件后,此文件就加锁,别人无法签出;或者,所有人都可以自由签出文件

针对这个场景,首先要划分优先级,如果程序员a要修复的问题需要马上立刻发布补丁,那么,程序员a应该直接签入修改的文件,发布完以后,程序员b先备份自己写好的文件,然后把程序员a签入的文件更新到本地,然后在本地将自己备份的文件和更新的文件进行合并即可。

签出文件后,此文件就加锁,别人无法签出:

这种情况,可以保证每个人获取的文件版本是最新的,也不会产生修改冲突。但是这种方式花费的时间相对要长一些,因为其他人要等签出这个文件的人签入完毕以后才能签出下来进行修改。

GitHub文件的锁定:

GitHub是不支持对同一个文件进行不同的签入的,所以两个人不能修改同一个文件,而这一点的保证是通过我们的分工实现的,因为人比较少,所以每个人负责的部分分的比较开,而且大家比较容易交流,同时修改同一个文件的情况会被避免掉。

所有人都可以自由签出文件:

由于现阶段的开发规模比较小,于是为了最大化效率,我们没有对文件迁入迁出进行过多的限制。将文件在迁入迁出时加锁,显然可以保证源代码修改的同步性,减少不必要的冲突和错误,所有人都可以自由签出文件,这种情况大家各自修改自己需要修改的模块,但是到合并代码的时候,需要人工合并,这种方式风险会大一些,特别是同一个人修改一个文件涉及到相同函数的修改。

 

 

3、如何看到这个文件和之前版本的差异?

在git管理中, 使用git diff即可看到文件和之前版本的差异。
 git diff:是查看working tree(工作目录)与index file(暂存区)的差别的。
 git diff --cached:是查看index file(暂存区)与commit(本地仓库)的差别的。
 git diff HEAD:是查看working tree(工作目录)和commit(本地仓库)的差别的。
在git里,这三个概念是很重要的,其中 git add的一个功能是将修改从工作目录添加到index file,commit的工能就是从index file的修改添加到 commit。

4、如果某个文件在你签出之后已经被别人修改,那么你如何合并不同的修改(merge)?

使用GitBash工具更新本地仓库,有冲突时对比解决冲突,然后签入代码

 

5、你有20个文件都是关于同一个功能的修改,你要如何保证这些文件都同时签入成功(修改的原子性)

场景: 程序员果冻要签入20个文件,他一个一个地签入, 在签入完5个 .h 文件之后,他发现一些 .cpp 文件和最新的版本有冲突,他正在花时间琢磨如何合并... 这时候,程序员小飞从客户端同步了所有最新代码,开始编译,但是编译不成功 - 因为有不同步的 .h 文件和 .cpp 文件!这时候,别的程序员也来抱怨同样的问题,果冻应该怎么办?

答:在实际开发中确实会遇到这样的问题,然而在Git中,所有在本地仓库中修改的文件都要统一经过commit为新的本地版本后,再push至远程分支。这就保障了本地修改提交的原子性,同时git服务器远程提供的修改操作也具有原子性。这样就保障了整体修改的原子性。

 

6、你的PC 上有关于三个bug 的修改, 但是都没有完成,这时你要紧急修改第四个bug,如何把本地修改放一边,保证在干净的环境中修改第四个bug, 并签入修改?

答:针对这个问题,最笨但是直接的方法就是将远程工程clone到本地,然后在另一个git仓库中修改bug。

然而,若前期用到了分支,即本身正在进行的大范围修改是在一个分支中进行的,那么可以新建一个branch,先将当前的branch放一边,在新的branch中reset到前一个版本,再进行修改和commit。

 

7、如何给你的源代码建立分支?

场景:你们需要做一个演示,所以在演示版本的分支中对各处的代码做了一个临时的修改, 同时,主要的分支还保持原来的计划开发。 你们怎么做到的? 在演示之后,演示版本的有些修改应该合并到主分支中,有些则不用,你们是怎么做到的?

答:使用github直接在上面进行打分支操作。

 

8、一个源文件,如何知道它的每一行都是什么时候签入的?

 场景: 一个重要的软件历经几年,几个团队的开发和维护,忽然出现在某个条件下崩溃的事故, 程序员果冻经过各种debug手段,发现问题是在某一个文件中有一行代码似乎显然出了问题, 但是这个模块被很多其他模块调用,  这行代码是什么时候,为了什么目的,经过谁签入的呢?  如果贸然修改, 会不会导致其他问题呢?  怎么办?

答:(1)git中有修改前后的对比,根据颜色我们可以找到修改的部分。是哪位成员在哪个时间提交的。此时电话咨询该同学。       

(2)用github的管理功能。      

(3)对于团队来讲每一次的任务都会被提前打上标签,而且在最后的签入的时候会有commit的记录保留,github上面有每一次的每一个人的提交的记录,对应着非常容易找到相关负责人。 

 

9、如何给一个系统的所有源文件都打上标签,这样别人可以同步所有有这个标签的文件版本?

 我们需要一个 Last Known Good (最后稳定的好版本) 版本, 这样新员工就可以同步这个版本, 我们如果需要发布,也是从这个版本开始。 那么如何标记这个 Last Known Good 版本呢? 
   在github上每次提交的时候将自己所写的内容标记好是什么。在后面同步的时候就能够清楚的看到。

 

10、你的团队是否能部署自动构建的任务 (自动同步所有文件,自动构建,自动运行单元测试,碰到错误能自动发邮件给团队)

答:配置了服务器,一开始使用的是Travis-CI来自动集成测试,但是由于网络因素,Travis-CI登录很慢,所以最后决意采用了drone.io来进行自动化的单元测试,每次测试都会自动按照预定的脚本运行单元测试,单元测试通过以后可以在Github的ReadMe里体现出来。

是这样的标志:

 

 

点开build passing的示例,我们可以看到在drone.io中我们部署的自动化测试: 

 

 

每一次commit都会触发自动化测试,在部署成功后(只针对master分支),已经test了38次。

 

 

 在Setting中也可以看到,我们在build出错时,会自动通知我的邮箱(ll58741@163.com)

 

 

posted @ 2019-05-27 17:05  哇咔咔名字难起啊  Views(143)  Comments(0)    收藏  举报