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

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

 

 

 

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

一个代码文件被签出以后,另外一我的能够签出这个文件,并修改么?有几种设计,各有什么优缺点?github

 

咱们小组的代码控制在Github中,用的是Windows系统。数据库

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

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

 

2.如何看到这个文件和以前版本的差别?测试

 

如上所述,咱们版本控制使用的是Git,因此咱们能够利用其中的一些特性来帮助咱们,例如:spa

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里体现出来。

相关文章
相关标签/搜索