如何使用git 提交作业 收作业
方法论:
今天就来用一个通俗易懂的自然模型来解释Git的commit,pull和push。不过,我们首先要理解两个名词,remote,local。
remote,翻译成中文,就是远程。为了更便于理解,我们称之为远程(代码)库。
local,本地的意思。同理,谓之本地(代码)库。
把这两个名字回归到一个我们熟悉的自然模型。
remote,就是学校。local,为你自己家。
你写的代码,就是你写的作业。
commit,提交的意思。
pull,直译为拉取,更通俗的讲,获取。
push,推送。
那么每天放学之前,老师布置了今天的回家作业。从布置回家作业,到第二天交回家作业,经历了哪些过程呢。
首先你要知道老师布置了什么作业,作业有什么要求。也就是你需要明确你需要写哪些代码,用什么语言,完成什么具体的需求等等。
然后,你需要把你的回家作业拿回家。这一步,就是pull(获取)。
回家之后,勤奋的你鞋子都没脱,就打开了书包开始写作业。
一小时之后,你写完了作业。
接下来,就是把你写好的作业放在书包里,准备第二天交给在学校的老师。
把写好的作业放在书包里,这一步,就是git commit。
第二天早上,你高高兴兴的去上学,拿出你的作业,交给老师。这一步就是push(提交)。
一个简单的拿作业到交作业的流程就是这个样子的。
不过,Git这个版本控制软件当然没有这么的简单,下一篇文章我将分享如何理解branch,merge,rebase以及如何使用Git进行多人协作。
那么,今天我们来思考,如何用Git让大家共同完成一份作业,也就是写一个程序。
首先,引入Git的branch概念。
之前的举的一个写作业的例子,我们现在来拓展一下这个模型。
学校里不可能只有你一个学生,你的班级里不可能只有你一个学生。
学校,可以理解成你的公司。班级,你所在的部门。学生,软件工程师(程序员)。
每个人都会push自己写好的作业,那么我们如何把不同人写的作业的过程(也就是代码提交的修改,还记得我们的第一节说的吗)清晰的显示出来呢。很简单,把不同人写的作业分开来放呗。
比如,张三写的一本本作业(一次次代码修改)放在一条线上,称这条线为zhangsan,贴一个zhangsan的标签。
李四写的一本本作业(一次次代码修改)放在zhangsan这条线的在地板这个平面的一条平行线上,称这条线为lisi,在这条线上贴一个lisi的标签。。
这分开的两条线,就是两个branch。
张三可以在zhangsan这条线上放上(push)自己的作业,李四可以在lisi这条线上放上(push)自己的作业,两条线之间可以互相不冲突。
当然,最后,老板(或者你的上司)会将作业写的好人的作业放在红榜上进行表扬。那么我们就需要一条线来放置老板认为质量最好的作业,对吧?我们称这条线为master,也就是我们的主线,这里放着写的质量最高的作业。
有了这条线,接下来我们是不是要把最好的作业放到master上呢?
而在Git中,完成这个操作有两种方式。一个是merge,一个是rebase。
我们先来弄清楚merge。
大家应该都已经懂了,我们每次都commit,都是一次代码的改动,那么多次代码的改动,当然可以变成一次改动,也就是将多次commit合并。多个commit与这多个commit合并所得的commit,是等价的。
张三把多次commit合并,变成了一个commit,然后把这次commit,合并到master这个branch上。这个操作就是merge zhangsan into master,这样会导致master这个branch只多一个commit。这个commit可能是多次commit的一次合成。Merge这个操作,就是将zhangsan这个branch相对于master的修改,在master上也进行了一次等价的修改。
那么这样zhangsan和master其实是一样的了,所以我们其实只需要一条线了,对吧。然后在这条线上贴上两个标签,zhangsan和master。
那么什么是相对于master的修改?
这里需要解释一下。假象一下,master这个branch上的作业(代码)是星期六的作业了。zhangsan这个branch在此时和master这个branch是一模一样的。你(比如你是zhangsan)星期天在你的branch commit并push了。那么相对于master这条branch,zhangsan这个branch有了星期日的作业,也就是相对于master有了修改。
那么什么是rebase?
同样的,有了相对的修改。
rebase,与merge不同,不会将多次commit合成一个commit。
而是将相对的修改直接抄过去。比如rebase master on lisi,就是将lisi这个branch相对于master的修改直接抄上去了,而且是一个commit一个commit的抄,那就会在master上留下多次commit。
其后面的本质其实是这样的,先将lisi这个branch相对于master的修改截取下来,保存在一个地方。此时lisi和master是等价的了。也就是一条线2个标签,然后这时把我们刚刚保存起来的修改,一个一个的放在master这条线上。
这就是rebase。
Git提交作业指南
Git
准备
去 https://coding.net 注册一个账号。
Coding和GitHub是同类型的产品,都是代码托管服务网站,Coding是国内的,GitHub是国外的,作为一个程序员最好两个网站都注册自己的账号!
第一步:设置Git的user name和email
邮箱是你注册Coding的邮箱。
git config --global user.name "your_name"
git config --global user.email "your_email@example.com"
第二步:生成公钥key
打开git bash
,执行:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
邮箱改成自己coding注册的邮箱,一直回车下去。
生成好了大概长这样,如图:
-
在你C盘
C:\Users\lenovo/.ssh/id_ras.pub
这个目录下找到id_ras.pub
这个文件注意:
(1) C盘下Users
叫做用户,好好学学英文!
(2) 不是每个人的文件夹都是lenovo
,也许你的是Administrator
或者别的,总之就是你电脑当前用户的文件夹。 - 把这个文件用记事本打开,全选复制发给我,或者直接把这个文件发给我,或者发给亚成、班长月影,等待给你加权限,加好了通知你之后继续下一步。
第三步:clone项目
如果已经clone过我的项目到你的本地请跳过这一步。
敲黑板.jpg, 仓库地址是:git@git.coding.net:Lxyour/WEB-Task-Store.git
,使用git clone
命令克隆,具体操作如下:
选择自己的一个盘符,比如E盘或者F盘,我这里选择F盘:
cd /f
然后克隆:
git clone git@git.coding.net:Lxyour/WEB-Task-Store.git
如果需要你输入(yes/no)
,当然是输入yes
然后回车啊!
第四步:本地拷贝你的项目放到仓库
在你对应的盘符打开WEB-Task-Store
这个文件夹,拷贝到对应课程期数的作业目录(例如我们本期作业目录是Task-201703
),比如我们本次提交HTML作业,将你的项目拷贝到HTML
这个目录,你的项目文件名字 前缀加上自己的名字 (比如:Qmeng-miui),不允许文件夹名字出现中文,否则强烈谴责,嗯哼。
注意: 执行
任何git命令
时请确认你当前窗口所在的目录是不是在项目仓库里,比如我们的项目是WEB-Task-Store
请确认git bash
是不是显示如下:
lenovo@YJSIT-xxx MINGW64 /f/WEB-Task-Store
$
重点看:
/f/WEB-Task-Store
,不一定是f
盘,前面是你自己电脑的信息,不一定一样。
第五步:git pull更新代码
为什么要git pull
?首先要知道git pull
的作用是更新项目代码,因为别人也提交过了作业,项目的代码被更新了,所以你要先执行git pull
,免得你git push
的时候会报错!
第六步:增加你的代码到仓库
这一步是增加你的代码到本地仓库,目的是让git仓库记录你要刚刚 改动过的代码。
git add --all
第七步:添加本次提交的信息
这一步是增加你本次提交的信息,描述你本次增加什么功能之类的。
git commit -m "写上你本次提交的描述"
// 例如:
git commit -m "Qmeng提交作业"
第八步:推送代码
这一步是把你刚刚执行git commit -m
提交的代码上传到线上仓库。
git pull
git push
预览自己的页面
成功推送完你的代码后可以通过下面这个地址访问:
https://lxyour.coding.me/WEB-Task-Store/Task-201712/web-blog/改成你的目录/
例如肖大涵的叫做xhan-miui-phone
,那就改成这样:
https://lxyour.coding.me/WEB-Task-Store/Task-201712/HTML/xhan-miui-phone/
最后
不管在学习过程中遇到什么问题先谷歌、先百度、先Bing!
不要问我搜什么,报什么错,就直接复制错误粘贴到谷歌搜索!学会通过科学上网(番羽土蔷)的方式访问谷歌,不会VPN就暂时用Bing,很多报错百度搜不到!
如有疑问,随时在群里请教其他同学。
平时多去搜索git入门以及git flow相关的文章学习并理解这方面的知识。
欢迎步入挨踢(IT)行业,一入IT深似海,选择哪一行应该是你的兴趣,这样你才能在这个事业路上走的更远!加油吧!
参考:https://www.jianshu.com/p/0623cb42fcfa