阅读 1657

我给我讲GIT,并成功把我得罪了

本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!


工作中如何使用GIT开发项目?(看到最后更精彩)

注意:如果你熟悉Linux操作系统,那么这篇文章阅读速度会加倍

另外:如果你熟悉SVN,那么Git只是一个更高级的版本管理工具而已

But:如果你不熟悉Linux,也不知道SVN,那么没关系,至少你使用过云盘来管理你日常的文件。

如果你连云盘都没用过。那么你还是早点回火星吧,地球很危险的。


为啥需要版本管理?

假设:

下周就要做年终工作汇报了,你打算今天把PPT做完。

反反复复用了一上午的时间,总算是完成了一半。

中午吃饭的时候,你依然在思考后半部分该怎么完成。

然后你突然间觉得,上午的方案有些问题,还需要再改一改下午5点20分.....

在你反复阅读自己的方案后, 仍然觉得,还是上午的方案更好

可这个时候麻烦来了 , 上午的方案早就被改的面目全非了

当时写的话术,使用的图片动画等等,都已经被你删除了

想用Ctrl + Z解决? 可惜PPT最多只支持150次操作回退,默认设置好像只有80次

这个时候,是不是特别想来一瓶后悔药?

朋友,是时候了解一下X度云盘会员了。 不要998! 不要998! ,只要96元,就可享受包年服务

image-20210624161137535

好了,刚才是个玩笑 , 但X度云盘真的有记录文件版本的功能

因此,我们认为,一个好用的云盘软件,应该具备以下几个功能:

  1. 用户A和B之间能够方便的进行文件共享
  2. 用户A和B可以修改同一个文件,云盘能够及时解决冲突问题
  3. 用户A对文件的修改提交后会同步给用户B
  4. 所有用户对文件的每一次提交都会有记录保存,操作失误时,可以还原之前的版本

版本管理 , 不正是因此而得名么?


SVN的优势

在使用git之前,你必须了解一下SVN

说起来,SVN可是曾经风靡全球的版本管理工具

SVN软件的使用,确实非常简单

它有两个安装包

img img

第二个安装包是服务器端,也就是说,你可以通过安装这个服务器端的软件,很轻易的在公司内部搭建一个SVN服务器

这样大家就可以在公司内网进行文件或是 代码的共享了

程序员在写代码时,经常需要协同开发(多个人维护一个项目)

SVN带来的方便,自然不言而喻,几乎所有的主流开发工具,都会配有SVN的插件

SVN的具体用法,这里不再详细描述。请读者自行百度


有了SVN,为什么会出现Git?

git这个软件的作者,是大名鼎鼎的Linus(Linux系统内核的发明人,编程界神话级的程序员)

不得不说,git这个软件,在易用性上,跟SVN差了不是一个数量级

但毕竟是专门给程序员用的,谁还考虑用户体验??

由于linus严重的个人兴趣倾向,他非常不喜欢文件集中式的管理

于是git软件打一开始就是分布式的

简单的说:就是任何人都可以向任何人的电脑上提交代码,任何人也可以从任何人的电脑上下载代码,任何人都可以被看作服务器端

再加上linus这种崇尚命令行主导一切的思维,git这个软件,打一开始就没有图形界面 image.png

所以使用git的时候,特别有种当黑客的感觉,有木有? image.png

img

尽管,git率先发明了分支的设计,但是,这糟糕的用户体验,并没能使它在全球范围迅速流行起来,直到 github的出现.....


git和github是啥关系?

github, 这个被大家戏称为全球最大的同性交友网站

它是如何崛起的呢?

github网站提供了如下的服务:

  1. 你可以到这个网站注册一个账号
  2. 通过这个账号,你可以建立自己的仓库
  3. 使用你本地的git软件将你的代码提交到github服务器
  4. 如果你的同事也注册了github账号,那你可以一键转载分享给他
  5. github上面的项目都是可以公开分享给其他人看的
  6. 我们不提供交友,只能提供代码分享及管理

你可以看到,github给我们带来了两个巨大的好处

第一 github让我们似乎又回到了SVN的服务器时代,方便。

第二 全世界所有知名的开源代码,都提交到了github上面并公开,这样一来,所有人都可以向这个开源项目提交自己的修改建议

它带动了git软件的流行,这就是今天你不得不学git的原因


git到底咋用?

首先,下个一个git软件 https://git-scm.com/downloads,并安装

在github上,建立一个空的project

建好项目后,会看到项目的地址

img

现在,把项目的下载地址复制好了

找到一个合适的目录,例如E盘,在该目录下点击右键选择git bash here

输入命令 git clone https://github.com/ay8yt/teach.git

项目就会自动下载,这时E盘会多出一个teach目录

好了,你现在可以打开你的开发工具,到这个目录下,编写你的代码了

项目写完了,咋提交呢?

在命令行使用 cd teach ,进入teach目录

输入命令: git add -A , 将所有文件添加至缓存区,准备提交

然后,输入 git commit -m '这里可以做一些描述,本次做了哪些修改'

提交成功!


可能还需要一些准备工作

如果你第一次使用git,提交时,系统会提示你先设置用户信息,那我们就设置一下:

git config --global user.email "随便邮箱"

git config --global user.name "随便用户名"

另外,由于项目通常是多人开发,你必须建立一个自己的分支

我知道你一定想问, 啥是分支? 。。。。。这个说来有点话长了

假设张三和李四要共同开发一个项目

虽然,他们俩负责的是不同的模块

但是,张三的模块如果出了BUG或者错误,会导致李四的项目也无法启动

为了避免冲突和互相干扰

张三和李四在开发之前,都把项目进行了一次克隆拷贝

接下来,他们分别在自己克隆的副本上进行修改和提交

img

接下来,张三就可以在自己的副本上进行修改和提交,和李四不会产生任何冲突

这就是 分支 的概念了

当然,张三的所有操作都是在自己的电脑本地进行的

如果本地电脑出了问题,本地记录的版本依然会全部丢失

所以,张三可以把自己本地的全部版本都推送到远程github服务器上

img

同样,李四也可以把自己本地的全部版本都推送到远程github服务器上

img

这时,我们查看github远程,会发现变成了这样:

img

这样一来,我们不仅把所有人的版本做了记录,而且整个开发过程中,张三和李四没有任何交集,也不会产生任何冲突

怎么样?有没有感觉这个分支的发明特别的帅气?

img

尽管SVN后来也迅速的推出了分支的功能,但它没有一个像github这么流行并统一的服务器。

github不仅提供了代码的托管,现在已经演变成了全球最大的代码分享社区

并在2018年6月份,以75亿美元的价格,卖给了微软

留给SVN的,只有一首《凉凉》


了解了基本原理,还是得学学具体如何使用

第一个我: 哎, 在工作中如何使用GIT开发项目?

第二个我: 你就不会说个hello,你好吗?或者,请问~之类的话吗?

第一个我: 我发现你事儿挺多的!

第二个我: 请 ~ 把你的问题具体化好吗?

第一个我: 那,这位(伪)大神,进入公司后怎么把gibhub上新建的项目down下来?

第二个我: 请不要称呼我大神,我只是比你强很多,虽然我也有那么一瞬间觉得自己确实是个大神

第一个我: 是哪些瞬间让你误会了自己呢?

第二个我: 喝醉的瞬间,清醒过来就好了! 好了回答你的问题,

如果你还有这样的疑问,显然你没有好好听课,因为上面已经讲过了。

算了,再说一次,下不为例。git clone https://github.com/ay8yt/teach.git

第一个我: 怎么在本地克隆一个副本,也就是创建一个分支?

第二个我: 使用branch命令。git branch yintao01

第一个我: 怎么进入这个分支呢?

第二个我: git checkout yintao01

img

好了,你现在应该能很明显的看到,你已经切换到了自己的分支,接下来的所有操作,都在这个副本上进行。

第一个我: 写了一部分功能,想保存一个版本,怎么做?

第二个我: 第一步,git add -A, 所有文件提交到缓存区

第一个我: 等等! 我有些文件不想提交,例如 node_modules文件夹,怎么忽略它?

第二个我: 你要在项目的根目录下,创建一个叫做.gitignore的文件,内容如下:

img

第一个我: 可是我刚才已经把不需要的文件提交到缓存区了,怎么撤销?

第二个我: 很简单,重置一下,git reset,然后就可以提交了。

第一个我: 等等!我想在正式提交之前,先查看一下,都有哪些文件提交到了缓存区?

第二个我: 你TM事儿真多!好吧,你可以使用git status命令查看,都做了哪些改动,以及所有文件的状态。

第一个我: 好了,那正式提交是不是commit命令?

第二个我: 没错!使用git commit -m '这里一定要把做了什么修改写清楚'

第一个我: 每次提交一个版本都得写啊? 那多麻烦? 不写清楚行吗?

第二个我: 你可以试试,把你肠子悔青。

第一个我: 刚提交完,就后悔了,感觉提交错了,想撤销这次提交,或覆盖这次提交,怎么做?

第二个我: 版本管理的好处,就是允许你后悔,首先你把错误的内容先修复好

然后再次add添加缓存,但这次提交时,注意使用git commit --amend -m '刚才的提交就覆盖了'

第一个我: 我想直接还原到上一个版本,怎么做?

第二个我: 使用git reset head^

第一个我: 我想直接还原到前两个版本,怎么做?

第二个我: 使用git reset head^^

第一个我: 那还原到前N个版本呢?

第二个我: git reset head^^^^^^^^^^...

第一个我: 你逗我呢? 这么麻烦?

第二个我: 没开玩笑,就是这样,当然你可以指定版本号直接还原

git reset --hard 7e2ec0f51e9ae2e7cbc7c4deca18b77b242148d6

第一个我: 版本号是个哈希值? 这么长咋记得住?

第二个我: 你可以用git log查看所有版本

第一个我: 我查了,可是每个版本都改了什么看不到啊,这aaaaa,bbbb,cccc,dddd都是什么鬼?

img

第二个我: 这不都是你自己提交时写的注释么? 不认真写注释的下场就是这样。活该。

另外,任何时候写代码,一定要想清楚了,测试通过了再提交,这是程序员的基本素质。

回滚操作虽然好用,但它不应该成为你的日常命令。如果一个程序员把各种回滚操作用的特别熟

通常表明他的代码水平不怎么样。

第一个我: 我看你用的就挺熟的呀

第二个我: 滚~~~~~~

第一个我: 如果本地我已经测试完并提交了,怎么推送到远程github上面?

第二个我: 为了方便做远程推送,通常我们会给远程仓库地址做个快捷方式。

git remote add miaodong https://git.oschina.net/ay8yt/test.git

这个miaodong就是快捷名称,接下来你提交时,就可以这样写:

git push -u miaodong yintao01 这句话的意思就是把yintao01这个分支推送到miaodong这个仓库地址

-u 的意思就是把yintao01设为默认分支

下次再推送,就可以直接写git push miaodong

第一个我: 我的模块已经开发完成,并测试通过,也推送到了github上,怎么把我的分支合并回主分支

第二个我: 在github上合并分支非常简单,找到Pull request,自己看说明去吧

img

第一个我: 就这?我都会!

第二个我: 有种你别跑!!!

至此,我成功的把我得罪了。你成功的掌握了日常工作中git的基本使用

文章分类
前端
文章标签