团队源代码管理

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

答:针对多人多任务的开发模式,我们团队从开发伊始就达成共识:源代码控制在Github上,使用与之相匹配的Git系统。

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

答:(a)可以。由于开发规模比较小,于是为了最大化效率,我们可以不对文件签入签出进行过多的限制。虽然对文件的签入签出加以限制,可以保证源代码修改的同步性,减少不必要的冲突和错误但是不加限制可以使项目并行进行,大大提高整个项目的效率。(b)不可以。在文件被签出的情况下,另一个人再签出这个文件会导致源代码修改时存在冲突和矛盾,合并这样的修改难度较高,因此,在文件被签出后加锁,能有效地避免这样的情况。但是这样的缺点是显而易见的,由于缺乏了并行性,项目开发的效率就被极大地降低了,极端情况下很有可能因为一个人的失误,导致全队项目的搁浅。

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

答:可以在Git中查看编辑记录。之前的版本没有考虑到信息查询时的权限,学生只能查老师的信息,而老师只能查学生的信息,在之前的版本中,我们的查询功能是所有人的所有信息都能被查到,我们就此基础上进行了版本修改,在新的版本中,我们增设了逻辑判断,判断用户是学生还是老师,如果是学生就只能查询老师信息,如果是老师那就只能查询学生信息,给用户使用的时候,增添了限制和安全性。

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

答:我会使用Git,使用git-merge命令将两个开发历史合并在一起。Git可以方便地对有简单不同的修改进行合并,但对于有逻辑冲突的部分将会给出conflict的提示,这时需要手工修改。针对文件的不同状态给出不同的颜色提示。使用分支,保持主分支的整洁。在分支进行提交,然后切到主分支更新(git pull —rebase),再合并分支、推送。这样的流程会避免交叉合并的情况出现(不会出现共同祖先节点为多个的情况)。

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

答: 在Git中,所有在本地仓库中修改的文件都要统一经过commit为新的本地版本后,再push至远程分支。这保障了本地修改提交的原子性,同时git服务器远程提供的修改操作也具有原子性。这样就保障了整体修改的原子性。可以直接对工程文件进行整个的签入挂起的更改,或者在修改之前为将要修改的文件都上锁,防止其他DEV在签入的时候进行签出操作。

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

答: 使用branch解决任务切换问题。建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。使用'git stash'就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用'git stash apply'将以前一半的工作应用回来。

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

答:分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响,所以在同一个数据库里可以同时进行多个修改。分叉的分支可以合并。在数据库进行最初的提交后, Git会创建一个名为master的分支。因此之后的提交,在切换分支之前都会添加到master分支里。在Git中可以自由地建立分支。但是,要先确定分支  的运用规则才可以有效地利用分支。

首先进入到要创建代码仓库的项目的目录下。

 1 $ cd d: 

 1 $ cd 2018-20192)/Java/Test5/Prototype 

 

使用 git branch命令查看本地分支

 1 $ git branch 

查看远程分支

 1 git branch -r 

查看所有分支

 1 git branch -a 

本地创建新分支

 1 git branch gh-dev 

切换到新分支

  1 $ git checkout gh-dev 

创建并切换到新分支

  1 $ git checkout -b gk-dev 

将新分支推送到github

  1 $ git push origin gh-dev 

注意此时弹窗需要登录github

 1 $ git push origin gK-dev 

 

删除本地分支

 1 $ git branch -d gh-dev 

 1 $ git branch -d gk-dev 

注意不能删除当前分支,要先切换再删除

 

删除远程分支

  1 git push origin :gh-dev 

 1 git push origin :gk-dev 

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

答:只要运行git blame [filename]命令,就能查看文件的每个部分是谁修改的,得到整个文件的每一行的详细修改信息:包括SHA串,日期和作者。

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

答:我们几个版本的源代码管理都没有用到标签。可能是该项目规模还比较小,用标签的收益不大。标签其实就是为整个项目或者某一个.java文件制定一个索引,在版本的推移中,如若发现新版本的各方面均不如之前的版本,可以通过标签查到到之前的版本或者某一文件。从标签的试用上来看,标签在大型项目中会十分灵活。能够快速定位到某一个变更集并对其进行操作。

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

答:测试目前的确是我们团队的一个短板,场景所提到的自动测试程序我们几乎没有。如今Beta的开发阶段已经过去,也仅是对成员做出测试数据记录以及测试日志的上传,测试强度依然欠缺。从现在到项目展示的这段时间,我们会尤其重视测试。如若时间条件允许,也会编一个自动测试程序进行各个变更集的编译测试。

分工安排

1759211 杨俣商 (1)(2);1759207 徐宇雯 (3)(6);1759208 杨雨婷 (4)(5);

1759213 孙子璇 (7)(8);1759230 茂杭斌 (9)(10)

原文地址:https://www.cnblogs.com/cwqbs/p/10941094.html