《软工实践专题》--团队代码管理

《软工实践专题》--团队代码管理

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

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

我们小组的代码控制在Github中,用的是Windows系统。

有两种设计:①签出文件后,文件加锁,别人无法签出。②文件不加锁,任意使用。

针对这两种设计,我们认为第一种可以保证项目代码版本控制更加合理,不会有类似读“脏数据”的情况出现,但是这样也会花费更多的时间,操作稍微会繁琐一些;相反第二种设计文件不加锁的时候,修改方便,适合我们现在这样刚起步的小项目,但是代码上会出现一定程度上的错乱。

 

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

如上所述,我们版本控制使用的是Git,所以我们可以利用其中的一些特性来帮助我们,例如:

git diff:是查看working tree(工作目录)与index file(暂存区)的差别的。

git diff --cached:是查看index file(暂存区)与commit(本地仓库)的差别的。

git diff HEAD:是查看working tree(工作目录)和commit(本地仓库)的差别的。

通过这些属性可以看到差别的详细细节。

 

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

使用Git帮助我们完成这件事。一般情况下,git pull后git会自动合并Git修改的部分,自动的Merge。但是,也存在无法自动合并的情况:比如像远程数据库和本地数据库的同一个地方都发生了修改的情况,此时Git无法判断要选用哪一个修改,所以就会发生冲突。但是,Git会在发生冲突的地方打个标记!下面我们拿网上的例子做个示范:

<<<<<<< HEAD

test in Local

=======

test in Remote

>>>>>>> 17c805…(Commit的Hash值)

==分割线上方是本地数据库的内容

==分割线下方是远程数据库的某次产生冲突commit所修改的内容。这时候需要识别哪些都可以保留,哪些保留远程数据库的内容,哪些保留本地数据库的内容。在将文件冲突的内容合并后,删除掉<<<<< 和=====,>>>>>这样的东西,重新add,commit,push,即完成了一次手工合并。

这就需要我们在分配任务时,遵循一个原则:尽量不让两个人的任务在同一个文件上产生重叠。每个人修改的文件范围或者其他都固定化,尽量不让两个人同时修改同样的文件。当然,像前端和后端在修改时大部分时候都会产生冲突,这时候我们就会使用另一套机制来帮我们避开这一点:新建分支与分支合并。(下面会讲到)

 

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

首先,git作为一个成熟的源代码版本管理系统本身就可以保证在签入时的原子性,所以一般在我们的项目开发流程中不太会遇到部分可签入,部分不可签入的问题。

但如果真的有遇到这样的问题,我们可以通过创建一个branch,branch的出现,可以让任何一位开发者基于其他人的代码或环境都完整可用(即stable版)的环境下进行自己的部分的独立开发 。最后的合并工作可以放在一天之内,将所有的Branch上的feature合并到一个dev分支上来。但是这样面临的风险也是有的,多个分支同时合并时如果出现了比较大的冲突,合并起来必须小心翼翼。同时,在解决一个Issue的时候,也可以新建一个Issue分支,在解决了Issue后,可以使用分支合并的技术将两个或多个分支合并。

 

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

在Git里,不能完整地保证commit后整个环境处于可编译或可运行状态下的commit是不好的提交。所以在文件半完工的状态下,我们不可以使用commit来将文件修改的内容留下来。Git为我们提供了一种类似于操作系统里的保存现场的指令,那就是stash。 它可以把当前工作现场"储藏"起来,等以后恢复现场后继续工作,使用方法类似下面:

 

$ git stash

Saved working directory and index state WIP on master: 5655bdc Merge branch 'mas

ter' of https://github.com/buaase/Phylab-Web

HEAD is now at 5655bdc Merge branch 'master' of https://github.com/buaase/Phylab

-Web

 

此外,既然需要一个干净的环境,还可以新创建一个本地仓库,从远程仓库clone到新的本地仓库中,进行修改。

 

6.如何给你的源代码建立分支?

建立分支利用git branch 分支名操作,跳转到相应分支用git check out 操作,分支合并用git merge 操作,在确认了修改以后,进行git commit 操作提交。

 

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

Github上会显示签入者名字和签入的时间

 

 

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

使用git来打标签这件事,在Github中是可以很方便来做这件事。每次发布到一定成果后,就需要发布一个realease版本,但是这样的话,是对commit本身打标签。点击release,然后会发现create a new release,点进去之后填一下就可以了。

 

9. 你的团队是否能部署自动构建的任务

 

(自动同步所有文件,自动构建,自动运行单元测试,碰到错误能自动发邮件给团队)

决定采用drone.io来进行自动化单元测试,每次测试都会自动按照预定的脚本运行单元测试,单元测试通过以后可以在Github的ReadMe里体现出来。

 

 

猜你喜欢

转载自www.cnblogs.com/HiangXuUp/p/10937710.html
今日推荐