现代软件工程第二次作业

完成下面的题目,并在小组博客中写出整个操作过程及学习心得(图文并茂):(每人都要在小组博客中写出来,并注明姓名)

1.参照 http://www.cnblogs.com/xinz/p/3803109.html 的第一题,每人建立一个GitHub账号,组长建立一个Project,将本组成员纳入此Porject中的Collaborators,并添加zykgnyue 为Collaborator。

2.每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。

3.完成小组的“CanTool”项目的需求文档(使用Markdown写文档),尝试同组成员在各自PC上修改同一文档后,如何使用Git命令完成GitHub上的文档的更新,而不产生冲突。并验证GitHub上的文档确实是最新的文档。

团队项目地址:https://github.com/ljc825/sofeware_engineering_homework1

CANTool项目地址:https://github.com/ljc825/CANTool

CANTool项目需求文档:https://github.com/ljc825/CANTool/blob/master/README.md

组员心得体会

刘敬成

如题,简要介绍一下GitHub使用的简要技巧

首先对GitHub做一个简单的介绍

gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。
gitHub于2008年4月10日正式上线,除了git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。
目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。 因为Git Shell使用起来比较麻烦,后面有时间再补充Git Shell的使用说明,在这里只对GitHub在Windows系统下的客户端程序做一些介绍。

 

——摘自百度百科
在我的认知中,GitHub是最大的在线代码共享平台之一,无论是工程还是科研,GitHub都能为我们提供大量、丰富的资源和参考资料
在未登录情况下,我们也是可以通过clone or download的方式下载GitHub上的代码,在这里不做详细说明

在这里主要对如何在GitHub创建工程做一些介绍
首先,你需要注册一个GitHub的账号
然后,登录github账号,进入个人页面
在这里,我们可以看到个人建立的代码仓库信息

右上角的加号,可以让我们创建新的代码仓库/组织
以新建代码仓库为例,点击new repository
我们在这里可以设置代码仓库的名字,增加描述信息、设置私有或公开,添加默认的readme文件等操作
 
 
创建完成后的代码仓库如图所示
对于项目中的文件的添加或修改,我们可以选择在线编辑或者从本地上传的方式
 以上传文件为例,现在GitHub的图形化界面版本可以帮助我们感觉方便、便捷的完成代码的上传,即Git中的add操作
 在实际使用中,我们的代码通常在本地使用IDE完成编辑,在线编辑的方式不太现实,同时,由于部分文件需要经常进行代码的更新,从本地反复上传的方式也存在一定的困难,在这里介绍一下一种更为方便的方式,GitHub的桌面版本或者Git shell。

首先,你需要下载GitHub for Windows的版本,这里给一个链接 https://desktop.github.com/

下载GitHub的桌面版程序,然后按照提示完成后续的安装步骤


完成所有的安装步骤之后,你的桌面上会增长这两个图标,第一个图标是GitHub的桌面版,第二个是Git Shell,相当于是前者的命令行方式,Git Shell对于常用的Git操作,如add/commit/push/pull/fetch/clone会变得更加方便,但是相比之下GitHub的桌面版更适用于初学者

打开GitHub桌面版之后,首先登录账号,然后进入到了默认的初始界面

左侧显示的是本地和服务器端进行同步的代码仓库,当我们选中一个代码仓库后,中间会显示近期的更新列表,右侧有详细的更新内容对比,红色为删除的内容,绿色为新增的内容

本地和服务器端同步代码仓库的创建分为两种方式,一是将服务器端已经存在的代码仓库clone到本地,二是直接把本地的代码仓库上传到服务器

对于第一种方式,我们选择左上角的加号,然后选择clone选项,选择一个服务器端的代码仓库clone到本地

对于第二种方式,方法类似,只不过变为使用create操作,add操作同理

对于一个具体的代码仓库,我们可以通过GitHub桌面版查看所有的历史版本信息

我们可以选择一个版本,查看这个版本的详细更新内容,并且我们可以回滚到任意一个历史版本,这是Git的一个最大的优势,可以有效的进行代码的版本控制,节约开发成本

最后讲解一下Push、pull、fetch和commit操作

版本的控制条右上方的sync按钮用于同步本地和服务器端的内容,将本地没有的内容pull下来,将服务器端没有的内容Push上去,当我们服务器与本地的版本内容同步完成之后,如果我们继续在本地进行更改,change列表中会实时的显示我们的更新内容,我们可以填写更新的注释,并且将这些change提交,需要注意的是我们这种提交只是commit,还需要sync一下才能更新服务器端的内容,fetch操作和pull操作类似,但是只是把服务器端的代码拉取到本地的版本库,并不实时更新到当前正在工作的代码,还需要后续进行merge操作

 

 

李一鸣

上面主要工作是通过github桌面客户端实现的,接下来我就用git shell进行一下基本的使用示范。

git clone

使用 git clone 可拷贝一个 Git 仓库到本地,让自己能够查看该项目或进行修改。

如果我们需要与他人合作一个项目,或者想要复制一个项目,看看代码,就可以克隆那个项目。

我们的项目地址查看如下:

 

  windows用户在此网站下载Git客户端并安装后,shift + 鼠标右键即可看到下图中的Git Bash选项,选择即可进入Git Bash界面。

 

clone命令示例如下:

git clone https://github.com/ljc825/sofeware_engineering_homework1.git

完成之后使用  ls 命令查看文件如下:

即可看到github上的项目已经成功同步到了本地。

 

git status

此命令用于查看项目的当前状态。

首先我先创建了目录 hello_world_lym,并在其下添加python版本的Hello World程序:

if __name__ == 'main':
    print("hello, world"

接着使用 git status 结果如下:

可以看到我们所做的修改已被检测出来。

 

git add

git add 命令可将该文件添加到缓存,示例如下:

可以看到文件已经加上去了, A代表添加,M代表修改,D代表删除。

git commit

使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 才会将缓存区内容添加到仓库中。

Git 在提交时会记录我们的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址:

git config --global user.name 'my username'
git config --global user.email 'my_email'

添加 -m 选项可以在命令行中提交注释

 

git push

使用 git commit 只是将代码添加到本地仓库中,推送(Push)操作才能将数据永久存储到Git仓库。成功的推动操作后,其他开发人员可以看到新提交的变化,

示例如下:

我使用了 git push origin master 命令。

origin指的是默认情况下服务器上的远端库的名字,master是项目的主干分支。

根据反馈,我们似乎已经成功了,检查github上的项目:

可以很清楚的看到,我们所做的修改工作已经同步到了github上,并且附带着我们最新一次修改的注释。

 

git pull & git fetch

 git pull 命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。

为了方便展示作用,我先直接在github上向项目中增加了一个文件:

然后本地使用 git pull 命令如下:

我们可以看到我们在网页上增添的文件已被同步到本地仓库。

 

实际上在默认模式下, git pull 是 git fetch 后跟 git merge FETCH_HEAD 的缩写。

git pullgit fetch的区别是:

git fetch:相当于是从远程获取最新版本到本地,但不会自动合并。

git pull:相当于是从远程获取最新版本并merge到本地。

 

其实关于git分支的问题还有很多,不过限于篇幅,这里就不一一探讨了。

 

贾永恒

同样是使用命令行演示 git 的使用。首先从 https://git-scm.com/ 下载安装最新版 git,安装完成后直接打开 Windows Powershell,如下:

则 git 安装完成。

 

git clone

此命令克隆远程仓库(repository)至本地,本次练习项目地址为 https://github.com/ljc825/sofeware_engineering_homework1,于是从 Github 上复制远程仓库(repository)地址:

本地执行克隆命令:

可以看到本地多了一个文件夹:

即为仓库文件夹,克隆成功。

在文件夹内新增 hello_world_jyh 文件夹,在 hello_world_jyh 文件内添加文件 main.java。

 

git status

git status 用来查看本地仓库的状态,如是否有新建而未被跟踪的文件,是否有已经缓存但未提交的修改,添加文件后运行 git status:

发现有新建而未被跟踪的文件,提示使用 git add <file> 来包含这些文件,以便后续的提交。

 

git add

git add 命令用来添加未被跟踪的文件。git add <file> 将文件"file"包含进来,有一种简单的形式,git add . 表示将所有未包含的我文件包含进来,运行 git add . :

 

git commit

git commit 命令用来将做出的改变提交到本地仓库,如下:

 -m 用来对此次提交添加信息,以便知道这次提交做出了何种改变。

提示提交成功。

 

git push

git push 用来将本地仓库“推送”到远程仓库,以保持两者之间的同步:

 命令行提示已经将本地的 master 分支推送到远程的 master 分支 (master -> master)。

打开远程项目地址:

本地的改变已经成功推送到远程。

 

为了演示 git fetch 和 git pull,通过网页在 GitHub 上添加新文件:

确定提交:

确认在远程仓库中添加了新文件:

在 Github 远程仓库中添加的新文件,在本地仓库是没有的,下面通过 git fetch 和 git pull 将其同步到本地仓库。

 

git fetch / git diff / git merge

git fetch 用来将远程仓库的内容提取到本地,不做其他操作。分支的合并需要用到 git merge 命令。

在做完上节的操作之后,远程仓库新增了一个文件,而本地仓库是没有的。执行 git fetch:

成功将远程仓库 fetch 到本地,但本地仓库看起来没发生变化:

文件夹中也仍然只有一个文件,没有新增的 a_new_file.md:

这是因为 git fetch 仅仅将远程仓库的内容提取到本地,不做其他操作,没有改变本地仓库。

既然已经把远程仓库的内容提取到本地,可以看看它和本地仓库有什么不同,使用 git diff 命令:

git diff master origin 中,master 代表比较本地仓库的 master 分支;origin代表origin/master,即远程仓库的master分支,由于不会有歧义就进行了简写。

比较发现远程仓库多了文件 a_new_file.md。下面将远程仓库这个改变合并到本地仓库,使用 git merge:

同时文件夹中也出现了新文件 a_new_file.md:

至此本地仓库和远程仓库已经完成了同步。

 

git pull

git pull 相当于 git fetch 后执行自动合并,相当于 git fetch + git merge。当没有冲突发生时可自动合并,操作比 git fetch + git merge 更简便。git fetch + git merge 的好处在于在 merge 前可以通过 git diff 观察两者的不同,然后再决定是否合并;而 git pull 直接执行合并的操作。

下面看看合并时有冲突时的情况。

远程仓库中,在 a_new_file.md 的第二行添加 I like eating apple.

在本地仓库的相同文件相同行添加 I like eating banana. 并提交修改。

这将产生冲突。直接执行 git pull:

提示自动合并失败,需要手动解决冲突,然后再按顺序执行 git add / git commit / git push 使本地仓库和远程仓库再次达到一致状态。

手动解决冲突:

去掉第 2、4、6 行,然后将文件改成自己想要的样子,如我想直接舍弃远程仓库的 I like eating apple. 就改成下面的样子:

之后执行:

git add .
git commit -m "fix conflict in a_new_file.md"
git push

即使本地仓库和远程仓库再次达到一致状态。git add . (或 git add a_new_file.md)必须要有。

冲突解决后远程仓库也同步为 I like eating banana.

与本地一致。本地仓库和远程仓库再次达到一致状态。

李岭

  Git的诞生是属于十分偶然的。它是由Linus在写Linux操作系统的过程中,发现代码库太大以至于没有办法手动管理,因此Linus就花费了2个星期的时间用C写了一个分布式版本控制系统,这就是Git。Git迅速成为最流行的分布式版本控制系统。尤其是在2008年GitHub网站上线,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等。分布式控制系统比较大的优势就是不需要联网进行工作,而且在每一个电脑上都有一个完整的版本库,所以Git的安全性相对会较高一些。

  Git的安装,在http://git-scm.com/downloads网站上选择安装适合Windows 64位操作系统的。进入Git Bash界面, 如出现如下所示的界面,则证明安装成功。

 

安装完成之后,需要填写用户名和邮箱作为标识,如下:

接下来,需要创建版本库,简单来说就是创建一个目录。这个目录里面所有的文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件“还原”。如下是建立一个testgit版本库。

通过git init 命令把这个目录变成git可以管理的仓库。如下:

之后就会生成一个.git的目录。

现在在版本库testgit目录下建立一个记事本文件readme.txt内容如下:李岭1

 第一步:使用命令 git add readme.txt添加到暂存区里面去。如下:

如图所示即为添加成功。

  第二步:用命令 git commit告诉Git,把文件提交到仓库。

如图所示说明已经提交了一个readme.txt文件了,接下来可以使用git status来查看是否还有文件未提交,如下:

显示没有未提交的文件。接下来如果修改readme.txt里面的内容,比如多添加一行李岭2,继续使用git status来查看结果,如下:

上面的命令告诉我们 readme.txt文件已被修改,接下来我们可以使用git diff readme.txt命令来查看修改的内容,如下:

在知道是什么状态之后,我们可以继续重复上面的内容,提交文件以及提交之后查看状态。

下面新建一个记事本文件夹,提交然后将该文件夹删除掉,如下:

那么如何在未重新提交之前恢复已经被删除的文件夹呢?可以使用如下命令来恢复:git checkout -- text.txt,如下图:

结果如下图出现text.txt文件

 

 

 

 

 

 

posted @ 2017-09-22 13:45  tju_sofeware_team  阅读(510)  评论(0编辑  收藏  举报