Lab 3:Git实战



1. 实验要求

实验场景1:仓库创建与提交、推送到GitHub


1.每次git操作前,查看工作区、暂存区、git仓库的状态,确认项目里的各文件当前处于什么状态;

2.本地初始化一个git仓库,将Lab1所创建项目的全部源文件加入进去,纳入git管理

3.提交;

4.手工对Lab1的若干文件进行修改;

5.查看上次提交之后都有哪些文件修改、具体修改内容是什么;

6.重新提交;

7.再次对Lab13个文件进行修改;

8.重新提交;

9.把最后一次提交撤销;

10.查询该项目的全部commit记录;

11.GitHub上创建名为Lab1的仓库,并在本地仓库建立相应的远程仓库

12.将之前各步骤得到的本地仓库全部内容推送到GitHubLab1仓库;


实验场景2:分支管理


1.获得本地Lab1仓库的全部分支,切换至分支master

2.master基础上建立两个分支B1B2

3.B2分支基础上创建一个新分支C4

4.C4上,对4个文件进行修改并提交;

5.B1分支上对同样的4个文件做不同修改并提交;

6.C4合并到B1分支,若有冲突,手工消解;

7.B2分支上对3个文件做修改并提交;

8.查看目前哪些分支已经合并、哪些分支尚未合并;

9.将已经合并的分支删除,将尚未合并的分支合并到一个新分支上,分支名字为你的学号;

10.将本地以你的学号命名的分支推送到GitHub上自己的仓库内;

11.查看完整的版本变迁树;

12.Github网站以web页面的方式查看你的Lab1仓库的当前状态


实验场景3:远程仓库与远程分支


1.获取自己Lab1的搭档的GitHub上的Lab1仓库的URL,在本地自己的Lab1仓库建立远程仓库指向它;

2.查询目前本地已配置了哪些远程仓库,查看各自详细信息以及权限等;

3.将自己搭档的Lab1数据从GitHub复制到本地;;

4.查看本地仓库当前的远程分支;

5.将本地以自己命名的分支推送到搭档的GitHub仓库中若无写权限?

6.GitHub自己的Lab1仓库获取搭档的最新推送;

7.查看本地仓库当前的远程分支;

8.将自己搭档对Lab1做出的变化合并到自己的本地仓库的学号分支;

9.再次将当前本地仓库的全部内容推送至自己的GitHub

10.查看本地仓库当前完整的版本变迁树;

11.不再关注搭档的GitHub Lab1仓库;

12.做完上述各步骤之后,将本地仓库的HEAD切换回master分支,确保自己本地文件系统恢复到Lab1结束时的状态。


实验场景4:Git查询指令


GitHub上的jQuery项目http://github.com/jquery/jquery 克隆至本地

使用git命令完成以下任务:
1.按时间从早到晚的次序列出该项目内的所有commit

2.选定一个commit,找出其父commit、提交者信息、作者信息、日期;

3.查询由[email protected]作为提交者的全部commit,每行一条,展示SHA、提交时间、message,从晚到早的次序排序;

4.获得该仓库内的所有tag,按时间从早到晚排序;

5.任选两个时间相邻的commit,找出它们的哪些文件做了修改,并分别给出增加的文件、删除的文件、修改的文件、重命名的文件、代码变化的行数、变化的代码内容;

6.选定一个commit,选定其中一个文件,查询该文件的每一行的owner

7.查询该仓库当前HEAD的位置;


实验场景5:Eclipse中使用eGit管理Lab2


Eclipse中,将自己的Lab2纳入git管理;

Lab2进行若干修改,使用eGit对其进行提交操作;

Lab2内容推送至个人GitHubLab2仓库。


  1. 安装Git

mac OSx系统下的安装

下载后在下载中找到Git文件夹,点击安装包,按照提示步骤安装。

安装后.git文件夹隐藏在 /usr/local/bin/git


pastedGraphic.png




pastedGraphic_1.png


申请SSH公钥,建立本地gitgithub的连接



pastedGraphic_2.png

  1. 2. 申请github帐号


github帐号名称:1150310526https://github.com/1150310526




pastedGraphic_3.png


本次实验中涉及的两个项目的URL地址:

Lab1:https://github.com/1150310526/Lab1.git


pastedGraphic_4.png


Lab2:https://github.com/1150310526/Lab2.git


pastedGraphic_5.png


  1. Git操作过程
  1. 3.1.实验场景1:仓库创建与提交、推送到GitHub


1.每次git操作前,查看工作区、暂存区、git仓库的状态,确认项目里的各文件当前处于什么状态;


git status


pastedGraphic_6.png



2.本地初始化一个git仓库,将Lab1所创建项目的全部源文件加入进去,纳入git管理


cd /Users/cathylau/Desktop/Test1

git init

git add .


pastedGraphic_7.png



3.提交;


git commit -m ‘Test1’


pastedGraphic_8.png


4.手工对Lab1的若干文件进行修改;


pastedGraphic_9.png


pastedGraphic_10.png

5.查看上次提交之后都有哪些文件修改、具体修改内容是什么;


git status


pastedGraphic_11.png


6.重新提交;


git commit 


pastedGraphic_12.png


7.再次对Lab13个文件进行修改;


pastedGraphic_13.png


8.重新提交;


git commit -a



pastedGraphic_14.png

pastedGraphic_15.png


9.把最后一次提交撤销;


git log //查询每次操作的commit

git reset --hard (commit值)//还原到倒数第二次commit的位置

或者

git commit --amend


pastedGraphic_16.png


10.查询该项目的全部commit记录;


git log


pastedGraphic_17.png


11.GitHub上创建名为Lab1的仓库,并在本地仓库建立相应的远程仓库


git remote add origin https://github.com/1150310526/Lab1.git


pastedGraphic_18.png

12.将之前各步骤得到的本地仓库全部内容推送到GitHubLab1仓库;


git push -u origin master


pastedGraphic_19.png

  1. 2.实验场景2:分支管理

1.获得本地Lab1仓库的全部分支,切换至分支master


git branch  - -all

git checkout master


pastedGraphic_20.png


2.master基础上建立两个分支B1B2


git branch B1

git checkout master

git branch B2


pastedGraphic_21.png


3.B2分支基础上创建一个新分支C4


git checkout B2

git branch C4


pastedGraphic_22.png


4.C4上,对4个文件进行修改并提交;


git checkout C4

git add Desktop/Test1/C41.txt

git add Desktop/Test1/C42.txt

git add Desktop/Test1/C43.txt

git add Desktop/Test1/C44.txt

git commit -a


pastedGraphic_23.pngpastedGraphic_24.png

5.B1分支上对同样的4个文件做不同修改并提交;


git checkout B1

git add Desktop/Test1/C41.txt

git add Desktop/Test1/C42.txt

git add Desktop/Test1/C43.txt

git add Desktop/Test1/C44.txt

git commit -a


pastedGraphic_25.png


6.C4合并到B1分支,若有冲突,手工消解;


git merge C4


pastedGraphic_26.png


产生冲突

点开文件夹中这些产生冲突的文件

删除<<<<<<

=========

C42

>>>>>>>>C4

重新addcommit



pastedGraphic_27.png



pastedGraphic_28.png

7.B2分支上对3个文件做修改并提交;


git checkout B2

git add Desktop/Test1/B21.txt

git add Desktop/Test1/B22.txt

git add Desktop/Test1/B23.txt

git commit -a


pastedGraphic_29.png


8.查看目前哪些分支已经合并、哪些分支尚未合并;


git checkout B1

gitk


pastedGraphic_30.png


9.将已经合并的分支删除,将尚未合并的分支合并到一个新分支上,分支名字为你的学号;


git branch -D B1  //这里可以发现当所要删除分支在checkout的时候是无法删除的


pastedGraphic_31.png


git branch 1150310526

git checkout 1150310526

git merge B2


pastedGraphic_32.png


10.将本地以你的学号命名的分支推送到GitHub上自己的仓库内;


git push -u origin 1150310526


pastedGraphic_33.png


11.查看完整的版本变迁树;


git log --oneline --graph --decorate --all


pastedGraphic_34.png


12.Github网站以web页面的方式查看你的Lab1仓库的当前状态


pastedGraphic_35.png


pastedGraphic_36.png

  1. 3.实验场景3:远程仓库与远程分支管理

1.获取自己Lab1的搭档的GitHub上的Lab1仓库的URL,在本地自己的Lab1仓库建立远程仓库指向它;


git remote add zhuren https://alice2458:1966sweet116741@github.com/alice2458/Test1.git


pastedGraphic_37.png


2.查询目前本地已配置了哪些远程仓库,查看各自详细信息以及权限等;


git remote -v

git remote show origin

git remote show zhuren


pastedGraphic_38.png


3.将自己搭档的Lab1数据从GitHub复制到本地;


git clone https://github.com/alice2458/Test1.git


pastedGraphic_39.png


4.查看本地仓库当前的远程分支;


git branch -r


pastedGraphic_40.png


5.将本地以自己命名的分支推送到搭档的GitHub仓库中若无写权限?


git push -u zhuren 1150310526

pastedGraphic_41.png


6.GitHub自己的Lab1仓库获取搭档的最新推送;


1150310521即为我搭档的远程分支


pastedGraphic_42.png


7.查看本地仓库当前的远程分支;


git branch -r


pastedGraphic_43.png


8.将自己搭档对Lab1做出的变化合并到自己的本地仓库的学号分支;


git config --global http.sslVerify false

git fetch zhuren 1150310501

git merge zhuren/1150310501


pastedGraphic_44.png

pastedGraphic_45.png


9.再次将当前本地仓库的全部内容推送至自己的GitHub


git push origin 1150310526


pastedGraphic_46.png


10.查看本地仓库当前完整的版本变迁树;


git log --oneline --graph --decorate --all


pastedGraphic_47.png


11.不再关注搭档的GitHub Lab1仓库;


git remote rm zhuren


pastedGraphic_48.png


12.做完上述各步骤之后,将本地仓库的HEAD切换回master分支,确保自己本地文件系统恢复到Lab1结束时的状态。


git checkout master


pastedGraphic_49.png

  1. 4.实验场景4Git查询指令

GitHub上的jQuery项目http://github.com/jquery/jquery 克隆至本地


cd /Users/cathylau/Desktop/

git clone http://github.com/jquery/jquery.git


pastedGraphic_50.png


使用git命令完成以下任务:
1.按时间从早到晚的次序列出该项目内的所有commit


git log --decorate --all --reverse 


pastedGraphic_51.png



这是一部分commit q退出


2.选定一个commit,找出其父commit、提交者信息、作者信息、日期;


git reset - -hard aee5a0fe70baedc71ca3b6f87d80a88f794e6d31

git log --pretty=format:"%P %cn %ce %an %ae %cd”


pastedGraphic_52.png


3.查询由[email protected]作为提交者的全部commit,每行一条,展示SHA、提交时间、message,从晚到早的次序排序;


git log --author="[email protected]" --oneline --all --pretty=format:"%H %cd %s”


pastedGraphic_53.png


4.获得该仓库内的所有tag,按时间从早到晚排序;


git tag


pastedGraphic_54.png

5.任选两个时间相邻的commit,找出它们的哪些文件做了修改,并分别给出增加的文件、删除的文件、修改的文件、重命名的文件、代码变化的行数、变化的代码内容;


git diff HEAD^ HEAD^^ - -stat

git diff HEAD^ HEAD^^


pastedGraphic_55.pngpastedGraphic_56.pngpastedGraphic_57.png



6.选定一个commit,选定其中一个文件,查询该文件的每一行的owner


git blame src/css.js


pastedGraphic_58.pngpastedGraphic_59.png




7.查询该仓库当前HEAD的位置;


git show HEAD


pastedGraphic_60.png

  1. Eclipse中安装和使用Git Plugin
  1. 4.1. EclipseGit plugin的安装和配置

pastedGraphic_61.pngpastedGraphic_62.png

pastedGraphic_63.png



  1. 2. Eclipse中使用Git plugin

1.建立仓库,github账户的连接


pastedGraphic_64.png


pastedGraphic_65.png


2.打开team,选择commit,创建.gitignore文件,将无需提交的文件忽略


pastedGraphic_66.png

pastedGraphic_67.png

3.team->add to index

   team->commit


pastedGraphic_68.png


pastedGraphic_69.pngpastedGraphic_70.png

4.push


pastedGraphic_71.pngpastedGraphic_72.png


  1. 计划与实际进度

任务编号

计划时间长度(分钟)

实际耗费时间(分钟)

提前或延期的原因分析

1

60

40

指令课件上都有,本以为不可能输入就好使,但没出什么差错

2

160

200

不太理解实验手册说的是什么意思,所以无法准确的百度到正确的指令

3

160

200

总是有权限问题难以解决,远程分支区分不清

4

100

140

一些要求输入格式不知道为什么一下子输出来这么多数据

5

20

120

一直在解决最后push的权限问题

  1. 小结

对本次实验过程和结果的思考:

  • 比较之前的开发经验,使用git的优点?

方便快捷,指令简单,及时推送,加载,修改。

可以随时回到旧的版本,在团队开发是与搭档的交互十分便捷。

  • 在个人开发和团队开发中,git起到的作用有何主要差异?

在个人开发中,git起到记录的作用。

而团队开发则涉及到分工,以及上传更改的不同的版本,git的本地及远程分支为我们带来了很多的便利,可以随时获取搭档的推送以便于进一步的修改和整合。

  • 之前是否用过其他的版本控制软件?如果有,同git相比有哪些优缺点?

没有用过其他的

  • 在什么情况下适合使用git、什么情况下没必要使用git

多人分工,迭代版本较多的情况下适合使用git,而一些小型的项目则没有必要。

你可能感兴趣的:(Lab 3:Git实战)