现代软件工程 第二章 作业
1. 创建GitHub账号并添加Collaborators——孙雪莹
题目要求:参照 http://www.cnblogs.com/xinz/p/3803109.html 的第一题,每人建立一个GitHub账号,组长建立一个Project,将本组成员纳入此Porject中的Collaborators,并添加zhangyk@tju.edu.cn 为Collaborator。
第一步:进入github网站,点击Sign Up按钮,进行账户注册
之后按照步骤填写相关的信息,进行注册,不要忘了登陆注册用的邮箱进行认证,这样就完成了注册。
第二步:成功后,点击Read the guide按钮可以进入github的使用教程。点击Start a project按钮建立一个新的仓库(repositry)
创建一个新的repository,名字命名为Hello_World,其他选项默认不变,勾选上Iniialize this repository with a README
第三步:最后点击Settings,Collaborators.在搜索栏,搜索小组成员和老师的名称,将他们添加为Collaborators.等待回复即可~
在最后都添加完的时候发现,我过于多此一举了,其实用自己的账号,创建一个project大家共享即可,我又申请了一个小组的账号。。。( — . — )
(进一步学习git,解决了这个问题,将小组的账号Hahalovejava,变成了orgnazition,这样添加小组四个人的账号和老师的账号。这样就不用每个项目都加Collabrators了。)
2. 学习git用法与心得
题目:每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。
①孙雪莹
参考:廖雪峰的官方网站——Git教程
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
第一步:我用的是Windows系统,所以首先安装msysgit。安装完成后,在开始菜单找到"Git"->"Git Bash",出现一个类似命令提示符类似的窗口,证明Git安装成功。
安装完成后,要进行进一步设置,因为Git是分布式控制系统,所以机器要确认你的名字和邮箱地址。
--global的意思是本地的所有Git仓库都使用这一个配置。
第二步:创建仓库(repository)
在“Git Bash”上输入语句 mkdir Hello_World ,创建一个空的repository,命名为Hello_World。 cd Hello_World改变目录到Hello_World下。pwd 命令可以显示当前所在目录。可以看到当前所在目录为/C/Users/Dell/Hello_World
然后,通过 git init 命令,完成仓库的初始化,使git可以管理仓库:
第三步:添加文档 add 命令
在本地建立一个 readme.txt的文件(廖大大特意声明,千万不要用Windows自带记事本编辑文档,用Notepad++编辑文档)。然后将文档放在之前建立的Hello_World目录下。
用 git add 语句,将文件,添加到仓库中。然后用命令 git commit ,将文件提交到仓库中。 这里的 -m 后面输入的是本次提交的说明,这个特别重要,git会记录操作者的每一步修改,有了提交说明,我们容易发现问题出在哪里,从哪里开始修改。git反馈给Collabrator 1个文件被改动,插入了两行内容。
第四步:commit 命令
Git和其他的控制系统不同的就是存在暂存区的概念。我们在电脑上看到的目录,文件夹就是工作区。工作区有一个隐藏的目录.git,这个是repo,里面有一个成为stage(或者index)的暂存区。
同样的步骤,练习添加Hello_World项目。首先用vs2013编写C++语言的Hello_World的cpp文件。
然后同样,先将Hello_world.cpp文件放在 Hello_World文件夹下,然后用 git add 语句添加暂存区。git status命令可以查看目前repository的状态。我们可以看出,Hello_world.cpp文件被添加到暂存区,暂存区的readme.txt文件被修改。但这时,只是将文件放在暂存区中,没有真正的添加到repo中。这时候我们就需要commit命令了,commit命令英文直译是执行的意思。 我们可以一次进行多次操作,然后用commit统一将暂存区的所有修改提交到repo中。当我们都提交后,我们用git status命令查看现在repo的状态,可以看出现在工作区就是clean的了。
第五步:push命令
push命令的使用就需要用到远程仓库了。就是我们之前注册的github的账号, 获取了远程仓库。因为我们的本地git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要提前进行一定的配置。
首先是创建SSH Key。在我的电脑的用户主目录中,没有.ssh目录,没有id_rsa 和 id_rsa.pub这两个文件。所以我们先用Git Bash,创建SSH Key: $ ssh-keygen -t rsa -C "phoenixsxy@foxmail.com"
成功后在目录里就可以找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件。id_rsa是私钥,id_ras.pub是公钥。私钥不能泄露,公钥是可以告诉他人的。(关于公钥,密钥的认证原理,请见http://blog.csdn.net/cnbird2008/article/details/8038926)
之后登陆GitHub,打开Settings ,SSH and GPG Keys,在Title里填上My SSH Key名称。将Key中粘贴上id_rsa.pub文件的内容,就是公钥。这样就完成了远程仓库的配置。
现在我们要先将远程仓库和本地仓库关联。这时远程库的名字是origin,这是Git默认的叫法。下一步就是将本地库的所有内容推送到远程库上。要用到 git push 命令。下图中的语句中,实际上是把master分支推送到远程库中,加上-u参数,是将本地master分支和远程的master分支关联起来。当第一次push命令(或者clone)命令链接GitHub的时候,会得到一个警告,按要求输入y ,yes即可。这个警告只会出现一次。
第六步:pull/fetch/merge命令
但当我完成以上步骤的时候,出现了一个错误。
经上网查阅资料,我知道了问题出在,github中一开始建立了一个README.md文件不在本地目录中。 于是,我们需要取回远程库中的文件,将它与本地的分支合并同步,才可以push本地更改。有两种方法 git pull 和 git fetch。
首先是 git fetch 命令,它通常和 git merge命令合用。
命令的含义是从远程的origin的master主分支取回最新的版本到本地。然后,将本地master分支和origin/master分支进行合并。
然后是 git pull语句: 在pull 中加-rebase 的意思是先把本地repo.从上次pull之后的变更暂存起来,回复到上次pull时的状态,合并远端的变更到本地,最后再合并刚刚暂存下来的本地变更。这是一个解决conflict的好方法。pull 命令相当于fetch和merge的和。rebase其实本质不是解决conflict,而是直接修改之前变更的内容。在实际使用中git fetch更安全一点。因为在合并merge之前,我们可以查看更新的状况,再决定是否要进行合并,比较之下pull直接完成了下载和合并,没有中间检查这个步骤。
成功后,我们可以看到,本地主目录下有了远程库中的README.md文件,下载成功。
这时候,我们再回到上一步的push命令,可以看到,现在可以正常推送本地内容到远程仓库了。
这时我们去远程库查看,同样可以看到,远程库的目录更新了,我们推送的Hello_world.cpp文件和readme.txt文档同步到了远程仓库。
第七步:clone命令
首先我们建立一个远程仓库clonetest,用来练习clone命令。创建的步骤同上所述,这里不再赘述。同样要勾选Initialize this repository with a README 选项,这样我们的repo中就有了一个READE.md的文件。之后用git clone 命令克隆一个本地库。
这里要注意把Git库的地址换成自己的,这里我一开始命令键入成Hahalovejava/Hello_World,我想的是放在我的本地repo里,但这样发现,它是将远程repo中的Hello_World repo克隆过来了。所以正确的格式应该是 账户名/要克隆的repo名。如上图,clone之后,我们查看主目录文件夹,可以看到多了clonetest仓库,并且,里面有README.md文件。这样clone就成功了。
学习心得 :通过学习git的使用,使我慢慢开始了解了这种分布式系统的优点,对于团队协作的便捷。学习git让我区分了远程repo和本地repo,也了解到git中stage的优点。在学习的过程中,会碰到些许问题,通过这次的上网自学教程,我学会了这种自学的方法,碰到问题,学会了上网查找资料自己解决。以后在网上学习其他的知识,我想我也会从容面对。同时,因为老师要求大家的作业要写在一个博客里,我和晓丽童鞋同时使用这个博客编辑的页面,我们编辑的内容不同,导致我最后上传的时候,就覆盖了晓丽上传的内容,可以看出,这个就不是分布式系统,不能多人同时协作。所以git的优势就显现出来了。以后大家会多多练习,将git使用起来~
第八步:branch练习
首先通过git 语句建立新的分支,有两种方法创建,于是创建两个分支。
第一种是 git checkout -b <分支名>
第二种是 git branch <name>
git checkout <name>
第一种一条语句和第二种方法是等价的,经测试确实如此。此时,用 git branch 命令,我们可以查看git 分支的状态,如下图所示,我们可以看出,有三个分支。绿色的tmp是目前的分支。
这时,我们在readme.txt 文档中输入 Creating a new branch is quick. 之后根据上面的add ,commit 语句将修改提交到本地git 中。
之后我们将分支转换到dev。用 git branch 查看当前分支的状态,可以看出现在是在dev分支上。
这时再打开readme.txt,可以发现txt文档就是之前未修改过的,因为上次修改是在tmp分支上的。这时我们在文档中输入This is branch dev test.
这时再用git checkout master语句,回到mater 主分支上, 这时将tmp分支和master分支合并。用git merge tmp语句。同样的此时,我打算合并dev 分支,但此时,出现了冲突。因为这时的两个分支都有提交,git 无法执行“快速合并”,所以我们必须手动解决冲突后再提交。
解决冲突的办法是再次add ,commit,之后再merge就成功了。然后这两个分支就没有用了。我们就可以删除分支了。用git branch -d <name>命令,先删除tmp分支,查看状态,只剩两个分支了。
同样我们再删除dev分支,再次查看分支状态,就剩master主分支了。 这时我们查看readme.txt文件,git用<<<<<<< , ======= ,>>>>>>>标记出不同分支的内容。
②张功
1、注册:在github官方网站进行注册,注册时注意密码至少包含一个数字字符。
2、Git命令使用
在应用搜索里搜索并打开应用git bash,在此应用上进行命令输入练习
1) 建立版本库:
① 选择建立位置:初始目录为电脑一级目录,使用命令“cd d”进入D盘(“cd 文件夹名”表示进入某一文件夹,若文件夹名为“..”则表示进入上一级目录),以此方式逐步进行,直至进入“D:\application\Git_repository”目录下,此目录为建立版本库的目录。注意建立版本库的目录文件夹及上级文件夹中最好不含有中文字符,避免操作是发生不必要的错误。
② 建立版本库:使用命令“mkdir Hello”在上一操作中进入的位置建立版本库,建立成功后,会出现一个名为“Hello”的空文件夹。
③ 重新确定版本库位置:使用命令“pwd”用于显示当前版本库的位置为“D:\application\Git_repository”。
④ 仓库可管理设置:通过“git init”命令把这个目录变成Git可以管理的仓库:
2) 命令使用练习
在对文件进行操作之前要注意自报家门,即让git知道是谁在进行操作
① 将文件添加到版本库(add、commit使用):首先编写一个文件并存储在版本库中,在这里我们新建一个简单的c文件,用于输出“Hello World”;告诉Git把文件添加到仓库,用命令“git add 文件名.文件类型”;用命令“git commit -m “备注信息””告诉Git,把文件提交到仓库提交成功后会显示文件存储信息。这里可以add多个文件,然后一起commit,用于文件的批量操作。
② 向远程库推送内容(push的使用):首先进行ssh key的配置,目的是实现git与我们在网站上的github进行连接,方便版本库的上传和下载;第二步,在github上新建一个repository名字与需要上传的版本库名称相同;第三步,关联远程库,使用命令“git remote add origin git@github.com:github_name/repository_name.git”其中github_name处填写的是注册github网站时使用的用户名,repository_name出填写的是关联的库的名称;第四步,使用push语句——“git push -u origin master”将本地版本库内容推送到远程库里;第五步,使用push语句——“git push origin master”进行最新版本的更新。
③ 从远程库克隆内容到本地:命令“git clone git@github.com:michaelliao/gitskills.git”其中github_name处填写的是注册github网站时使用的用户名,repository_name出填写的是关联的库的名称。建议在克隆之前最好查看一下当前git打开位置,确认位置正确后再进行操作。
④ 更新本地库,使其与远程库同步:当很多人处理一个远程库内的文档时,需要更新本地库使其与远程库同步,再将本地修改进行上传,使用命令“git pull”进行操作。
③张晓丽
题目:每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。
学习使用github参考了廖雪峰的官方网站——Git教程
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
1、在GitHub官网上注册了一个新账号XiaoliCoding
2、安装了git,然后点击"Git—>Git Bash",弹出来一个类似DOS命令行提示的窗口,git安装成功
3、按照教程一步一步进行,创建仓库,使用git add 、commit等命令上传了HelloWorld程序
4、创建仓库Repository,命名为Hello_World,将要上传的文件导入仓库中,使用git init命令将这个目录变成仓库
5、使用git add 文件名 和git commit -m 把文件提交到仓库中
6、登录github账号,设置SSH KEY ,new repository,创建github仓库,使用命令使本地仓库和远程仓库的内容同步
HelloWorld.cpp上传成功
7、添加readme.txt
readme.txt上传成功
8、使用clone命令
先创建远程库,命名gitskills,勾选Initialize this repository with a README
,GitHub会自动为我们创建一个README.md
文件
使用git clone命令
这样打开本地仓库,就能看到从远程仓库克隆的gitskills文件夹了
这是我第一使用github,刚开始对于本地仓库和远程库的理解没有到位,导致刚开始一直上传失败,经过练习,现在基本能够掌握上传文件的方法,也理解了本地库和远程库的联系与区别。通过这次作业基本学会使用简单的git命令,能够将本地仓库的文件上传到远程仓库,将远程仓库的文件克隆到本地仓库。
④原旭莹
我是在Windows上安装使用Git的,首先下载msysgit,下载地址:https://git-for-windows.github.io/。下载完成后按照默认选项安装。安装完成后,在开始菜单找到“Git->Git Bash”,弹出类似命令行窗口的的界面,说明Git安装成功。如图1所示。
图1
安装完成后,还需设置用户名和邮箱,在命令行输入用户名和邮箱,如图2所示。
图2
创建版本库,pwd命令用于显示当前目录,在我的电脑上,这个仓库位于C/Users/xuxiao415/helloWord中(使用Windows系统时,为了避免遇到各种莫名其妙的问题,尽量保证目录名(包括父目录)不含中文)。如图3所示。
图3
通过git init 命令将这个目录变成GIt可以管理的仓库,如图4所示。此时,Git仓库就建好了,而且是一个空仓库(empty Git repository)。
图4
使用Notepad++代替记事本,下载地址:https://notepad-plus-plus.org。我使用的是C#编写代码,开发环境为vs 2013,将HelloWorld.sln文件复制到helloWordl目录下。
使用git add命令将HelloWorld.sln文件添加到仓库中,如图5所示。执行该命令后,没有任何显示则说明添加文件成功。
图5
使用git commit命令将HelloWorld.sln文件提交到仓库中,如图6所示。
图6
注:在往Git版本库里面添加文件时,是分两步执行的:第一步使用git add命令把文件添加到暂存区;第二步使用git commit命令把暂存区的所有内容提交到当前分支。由于我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
创建SSH Key,在用户主目录下,查找有没有.ssh目录,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key。我在之前练习git命令操作时已创建好了SSH Key,创建好的SSH Key如图7所示。
图7
执行到此步骤已经在本地创建好了一个Git仓库,现在GitHub上创建一个Git仓库,并让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
登录GitHub,在右上角找到“Create a new repo”按钮,创建一个新的仓库,如图8所示。目前,在GitHub上的这个helloWorld仓库还是空的,可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
图8
我在执行git push命令时出现报错,如图9所示。经网上查找资料,发现错误在于在联系远程仓库时新建了一个hello_world.txt的文件,该文件不在本地目录中,因此需取回hello_world.txt文件,将该文件加入本地仓库,如图10,图11所示。执行后结果如图12所示。
图9
图10
图11
图12
此时就可以执行git push命令,将本地库的所有内容推送到远程库上,如图13所示。结果如图14所示。
图13
图14
使用git clone命令从远程库克隆到本地库,如图15所示。结果如图16所示。
图15
图16
3.四则运算需求文档
题目:完成小组的“四则运算”项目的需求文档(使用Markdown写文档),尝试同组成员在各自PC上修改同一文档后,如何使用Git命令完成GitHub上的文档的更新,而不产生冲突。并验证GitHub上的文档确实是最新的文档。
首先在本地MardownPad上编辑需求文档。Markdown的相关语法参考了http://wowubuntu.com/markdown/index.html 教程。
之后按照第二题学习的步骤,将需求文档上传。
成功后,可以在github中看到上传成功的文件。
小组修改文件学习了两种方法,第一种是直接在网页上直接修改文件,点击文档,之后直接点击编辑按钮,在页面键入需要修改的内容,之后增加修改的备注,commit之后,就可以看到修改成功的记录。
我和旭莹都是按照这种方法修改的,旭莹的就不再赘述了。另一种方法是先将远程repo中的文件clone 到本地后,在本地修改之后,再上传到远程repo中。这种方法由晓丽来详细说明一下。掌声欢迎!
1、先将远程仓库的Calculate文件clone到本地
使用git clone语句将远程库中的文件克隆到本地库
2、在本地文件Calculate_PRD_1.0.md中进行修改操作,进行保存。
3、使用git语句将改过的文件上传到github远程库中
最后在github上可以查看修改过的内容
通过这题,我们充分学习到了如何使用这种分布式系统,也深深感受到了这种系统的强大。