团队博客作业——团队源代码管理
1、你的团队的源代码控制在哪里?用的是什么系统?
首先,我们选择git管理代码;
我们需要进行待修复的问题进行评估,若是待修复的问题需要立即发布补丁,那么则需要对方直接签入修改文件,修改完成后,发布同时需要备份自己编写的文件,然后把对方的文件更新到本地,之后在本地将自己备份的文件和更新后的文档进行并入【merge】。
2、一个代码文件被签出之后,另一个人可以签出这个文件,并修改么?有几种设计,各有什么优缺点?
例如,签出文件后,此文件就加锁,别人无法签出;或者所有人都可以自由签出文件。
情况 |
情况描述 |
优点 |
缺点 |
① |
签出文件后,此文件就加锁,别人无法签出 |
可以保证每一个人获取的文件版本都是最新的,避免了修改冲突的产生。 |
花费时间较长 |
② |
任何人都可以自由签出 |
每个人都可以各自修改自己需要修改的模块。 |
在代码合并时需要进行人工合并;同时风险略高。 |
3、如何看到这个文件和之前版本的差异?
以github为例,进入项目后即可查看项目的编辑记录,如下图:
另外,很多开发工具本身也具备show history功能,
在github上,在code页上,点击下图标志,进入commits查看记录
进入commits后,如下图
从上图中可以看到,commits中也记录了改动的原因,如删除、更新;对于bug问题,在issue窗口我们可以进一步了解,如下图:
在每一次提交时,我们都可以对提交的项目进行描述,方便之后查看。
4、如果某个文件在你签出之后已经被别人修改,那么你如何合并不同的修改(merge)?
Git可以方便的对不同的简单修改进行合并,同时,对于存在逻辑冲突的代码则会给出提示,提醒用户进行手动修改;
另外,Beyond Compare 4可以处理合并修改的问题
下载地址:http://www.scootersoftware.com/download.php
5、你有20个文件都是关于同一个功能的修改,你要如何保证这些文件都同时签入成功(修改的原子性)
在签入前,一定要对比处理存在冲突的文件;在git中,所有本地仓库中的文件都要通过commit保证为最新本地版本,避免了上述情况的发生。
统一采用git将本地代码上传至github。在每一次签入代码之前都需要经过测试,测试无误后才会签入,这就在一定程度上保证了同一个功能的相关文件都被正确修改了,然后这时再一起签入。假如测试有遗漏,在之后的阶段还是可以查看到相应记录的,然后再进行相应修改。由于团队成员较少,可以通过彼此的交流避免此类问题,当我们需要进行一个功能的修改时,会在微信上说明。而在通过git push 将本地代码上传之前,均需要将本地的改变提交至本地仓库,commit操作会生成一个commit对象,所以Push时只是将这次commit对象提交至远程分支。而git会随时保证数据的完整性,一旦上传过程中出现问题(断网),会撤销掉之前的上传记录。
通过查看提交记录验证,文件是否同时提交成功,若无法同时成功提交,则使用git reset命令撤回提交记录。
6、你的PC上有关于三个bug的修改,但是都没有完成,这时你要紧急修改第四个bug,如何把本地修改放一边,保证在干净的环境中修改第四个bug, 并签入修改?
创建新的分支,切换到该分支,修改bug后,提交该分支。通过git pull将远程分支代码拉到本地进行BUG修改,之后在同之前的分支进行合并,在通过git push上传至远程分支。
当把一个功能修改完成并测试完成后,上传至github并更新本地的备份文件。保证本地保存有一个最新的无bug的工程文件,这样既可以方便紧急进行修改,也能处理修改过程中发现这条路行不通,换个方式解决问题的情况。
7、如何给你的源代码建立分支?
使用git branch新建本地分支,切换分支后,push到远程仓库。建立分支利用git branch 分支名 操作,跳转到相应分支用git check out 操作,分支合并用git merge 操作,在确认了修改以后,进行git commit 操作提交。
(1)创建dev
分支,然后切换到dev
分支:
(2)用git branch
命令查看当前分支:
(3)在dev
分支上正常工作,比如对file.java做个修改:
dev
分支的工作完成后,就可以使用git checkout master切换回master
分支。
以下是关于分支的命令:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
8、一个源文件,如何知道它的每一行都是什么时候签入的?
(1)在GitHub会自动记录每行代码的签入时间和整个签入时的加入的标注,因此通过查看记录就可以知道上述问题。
git blame [filename] -L
开始行号,结束行号
。格式: commit ID | 代码提交作者 | 提交时间 | 代码位于文件中的行数 | 实际代码
cd 到该文件所在目录,使用git log查看提交记录,然后可以使用git show 命令查看具体的修改详情了。代码:git show <git提交版本号> <文件名>
(2)采用在修改的代码后添加注释,说明是何时由哪个组员进行修改的。
以下是使用git log查看的命令:
1. git log 查看提交历史记录。
2. git log --oneline 或者 git log --pretty=oneline 以精简模式显示。
3. git log --graph 以图形模式显示。
4. git log --stat 显示文件更改列表。
5. git log --author= 'name' 显示某个作者的日志。
6. git log -p filepath 查看某个文件的详细修改。
7. git log -L start,end:filepath 查看某个文件某几行范围内的修改记录。
8. git log --stat commitId 或者 git show --stat commitId 查看某一次提交的文件修改列表。
9、如何给一个系统的所有源文件都打上标签,这样别人可以同步所有有这个标签的文件版本?
在git 的时候,标签是用在有重大更新或者改动的时候,可以用版本号来标识,例如v1.0。当编写完最终版本后,可以在版本后的加入后缀-Last来标识。
命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git tag -a <tagname> -m "..."可以指定标签信息;
命令git tag可以查看所有标签。
也可以用git show <tag name>
查看标签信息。
10、你的团队是否能部署自动构建的任务
(自动同步所有文件,自动构建,自动运行单元测试,碰到错误能自动发邮件给团队)
我们团队并没有构建自动测试脚本。组员会将自己的代码进行单元测试后将结果发在微信群中。团队的部分代码上传至GitHub的团队仓库中,遇到错误时多在微信群中讨论并解决问题。