我们知道我们的文件在需要管理的时候,如果出现崩溃或者文件丢失的情况的时候,就会对管理和工作造成非常严重的影响。而这个时候,我们就需要用到git和github来管理我们所使用的项目,可以帮助管理我们的项目版本。那么,就让我们来了解git和github吧。
关于版本控制,当我们需要给文件去设置,设计不同的版本,最初的想法可能就是不停的创建文件,复制粘贴。但是这个过程明显是存在缺点的:
因此,我们就需要通过一些方法来方便管理这些文件。
版本控制软件是什么呢?我们来了解一下:
那么,用版本控制软件有什么好处呢?有一下这些好处:
知道了版本控制软件的好处之后,我们现在所知道的版本控制软件都有些什么呢?
- 分布式版本控制系统:联网运行,支持多人协作开发;性能优秀、用户体颚
- 集中化的版本控制系统:联网运行,支持多人协作开发;性能差、用户体验不好
- 本地版本控制系统:单机运行,使维护文件版本的操作工具化
让我们分别看看这些控制系统的情况:
我们可以看到,最优秀的系统,就是Git,那么接下来,就让我们来学习Git。
Git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。
特点:项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性
Git之所以快速和高效,主要依赖于它的如下两个特性:
传统的版本控制系统(例如SVN)是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累积的差异。
Git快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
使用Git管理的项目,拥有三个区域,分别是工作区、暂存区、Git仓库。
git也有对应三个区域的三种状态:
注意:
- 工作区的文件被修改了,但还没有放到暂存区,就是已修改状态。
- 如果文件已修改并放入暂存区,就属于已暂存状态。
- 如果Git仓库中保存着特定版本的文件,就属于已提交状态。
基本的Git工作流程如下:
在开始使用Git管理项目的版本之前,需要将它安装到计算机上。可以使用浏览器访问如下的网址,根据自己的操作系统,选择下载对应的Git安装包:git
这里需要注意一点:因为git属于外网的网站,如果需要去下载安装包会需要很多的时间,此时你可以选择用加速器或者其他的资源路径前往下载。
这里有安装git的教程
这里之后的操作,在我们安装了Git之后,找到对应的文件夹右键操作:
这里只需要我们点击git bash here 就可以打开面板输入下面的指令
安装完Git 之后,要做的第一件事就是设置自己的用户名和邮件地址。因为通过Git对项目进行版本管理的时候,Git需要使用这些基本信息,来记录是谁对项目进行了操作:
通过git config --global user.name和 git config --global user.email 配置的用户名和邮箱地址,会被写入到C:/Users/用户名文件夹l.gitconfig文件中。这个文件是Git的全局配置文件,配置一次即可永久生效。
除了使用记事本查看全局的配置信息之外,还可以运行如下的终端命令,快速的查看Git的全局配置信息
我们可以通过下图的方式来获得帮助信息:
到这里安装之后的操作就结束了,接下来就是关于git的基础操作内容。
git的操作有很多,让我们一起来看看吧。
以上两种方式都能够在自己的电脑上得到一个可用的Git仓库
工作区中的每一个文件可能有4种状态,这四种状态共分为两大类,如图所示:
在状态报告中可以看到新建的 index.html文件出现在Untracked files(未跟踪的文件)下面。
未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非明确地告诉它“我需要使用Git跟踪管理该文件”。
使用git status输出的状态报告很详细,但有些繁琐。如果希望以精简的方式显示文件的状态,可以使用如下两条完全等价的命令,其中-s是--short的简写形式:
注意 .号相当于选择了多个文件的意思,下面知识点也可以用同样的方法选择多个文件移除
Git标准的工作流程是工作区→暂存区→Git仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到Git仓库,这时候Git工作的流程简化为了工作区→Git仓库
Git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit加上-a选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤:
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。在这种情况下,我们可以创建一个名为.gitignore 的配置文件,列出要忽略的文件的匹配模式。
文件.gitignore 的格式规范如下:
- 以#开头的是注释
- 以/结尾的是目录
- 以/开头防止递归
- 以!开头表示取反
可以使用alob模式进行文件和文件夹的匹配(alob指简化了的正则表达式)
如果希望回顾项目的提交历史,可以使用git log这个简单且有效的命令。
在了解Github之前,我们先来了解一下什么是开源。
开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议( Open Source License ) 。
这里需要注意,最重要的开源协议就是GPL和MIT,这两个更加常见,使用更多。
以上理论以了解为主)
专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台主要有以下3个:
- Github(全球最牛的开源项目托管平台,没有之一)
- Gitlab(对代码私有性支持较好,因此企业用户较多)
- Gitee (又叫做码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好)
注意:以上3个开源项目托管平台,只能托管以Git管理的项目源代码,因此,它们的名字都以Git开头。
了解了开源下,最合适使用的项目托管平台是Github,那么就好好学习Github的使用吧。
Github是全球最大的开源项目托管平台。因为只支持Git作为唯一的版本控制工具,故名GitHub。在Github 中,你可以:
- 关注自己喜欢的开源项目,为其点赞打call
- 为自己喜欢的开源项目做贡献( Pull Request)
- 和开源项目的作者讨论Bug和提需求( lssues)
- 把喜欢的项目复制一份作为自己的项目进行修改(Fork)
- 创建属于自己的开源项目等等
访问Github的官网首页
点击“Sign up”按钮跳转到注册页面,填写可用的用户名、邮箱、密码。
这里需要注意,Github是外网地址,那么要用加速器的事情你也明白,不用的话不仅很慢,很可能会卡在注册界面。如果有别的方法的话,可以自己去尝试。
注册完了之后我们就可以开始使用Github了
请看图解:
按图示方法,点击创造你的远程仓库。这个界面在你完成账号注册之后,只要登录就会显示这个界面。
Github上的远程仓库,有两种访问方式,分别是 HTTPS和SSH。它们的区别是:
- HTTPS:零配置;但是每次访问仓库时,需要重复输入Github的账号和密码才能访问成功
- SSH:需要进行额外的配置;但是配置成功后,每次访问仓库时,不需重复输入Github的账号和密码
注意:在实际开发中,推荐使用SSH的方式访问远程仓库。还需要注意的是,虽然HTTPS的使用,以前只需要输入账号和密码就可以了,但是在前年就发布了无法使用密码的方式来访问,改成了账号和输入token(password)的方式来访问,麻烦程度超过了SSH。
这里提供使用token的方法介绍:如何使用token
当我们的文件已经提交过一次之后,如果我们还需要提交命令,那么使用git push就可以继续提交
这里需要注意,在你执行下面的代码的时候,因为时代的更新,会有这么一段代码
git branch -M main Github把原本的master去掉了
那么是怎么回事呢?这里有一篇文章可以告诉我们:Github 太狠了,居然把 "master" 干掉了!
但是这个过程并不影响我们运行。重点是如果我们按照教程里面的方式git bash here打开面板输入的时候,会提示你输入用户名和密码,这个时候输入的我们注册的账号和密码是不行的,要看上面的token的使用方法来输入才能正常的运行。
SSH key的作用:实现本地仓库和Github之间免登录的加密数据传输。sSH key的好处:免登录身份认证、数据加密传输。
SSH key由两部分组成,分别是:
- 打开Git Bash
- 粘贴如下的命令,并将[email protected]替换为注册Github账号时填写的邮箱:
- ssh-keygen -t rsa -C "[email protected]"
- 连续敲击3次回车,即可在C:\Users\用户名文件夹\.ssh目录中生成 id_rsa和id_rsa.pub两个文件
- 使用记事本打开id_rsa.pub文件,复制里面的文本内容
- 在浏览器中登录Github,点击头像->Settings -> SSH and GPG Keys -> New SSH key
- 将id_rsa.pub文件中的内容,粘贴到Key对应的文本框中
- 在Title文本框中任意填写一个名称,来标识这个Key 从何而来
和HTTPS的方式是一样的,但是更加方便。
这里附上我的截图来更加细致的说明一下:
上方所说的位置复制链接地址,添加在git clone 的后面,就可以实现了。
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。
如果两个平行宇宙互不干扰,那对现在的你也没啥影响。
不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN
其实,分支在实际开发中的作用,就是在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目功能的开发,例如:
在初始化本地Git仓库的时候,Git默认已经帮我们创建了一个名字叫做 master的分支。通常我们把这个master 分支叫做主分支。
注意:这里和上述的内容说明了,其实master已经被切换为了main,但是代码大体上是没有问题的,只需要吧master切换成main就可以了。
由于程序员不能直接在master分支上进行功能的开发,所以就有了功能分支的概念
功能分支指的是专门用来开发新功能的分支,它是临时从master主分支上分叉出来的,当新功能开发且测试完毕后,最终需要合并到master主分支上,如图所示:
使用如下的命令,可以基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一样:
使用如下的命令,可以切换到指定的分支上进行开发:
使用如下的命令,可以创建指定名称的新分支,并立即切换到新分支上:
功能分支的代码开发测试完毕之后,可以使用如下的命令,将完成后的代码合并到master主分支上:
当把功能分支的代码合并到 master主分支上以后,就可以使用如下的命令,删除对应的功能分支:
如果在两个不同的分支中,对同一个文件进行了不同的修改,Git就没法干净的合并它们。此时,我们需要打开这些包含冲突的文件然后手动解决冲突。
手动解决的过程,就是通过打开文件(用vscode打开)
如果是第一次将本地分支推送到远程仓库,需要运行如下的命令:
通过如下的命令,可以查看远程仓库中,所有的分支列表的信息:
这里我们来看看怎么更新github里的代码,打开自己的仓库,然后点击js文件:
就可以打开下面这个界面:
点击铅笔就可以对文件编辑:
之后我们使用git pull就可以吧更新过的js文件下载到本地。
没有被合并的分支,可能会出现系统提示,不能用普通的删除方法,此时会提示使用-D的方式来删除。
Git和Github的使用,需要各位自己去自己实际操作一遍,就可以学懂了。多看看总结里需要我们记住的东西,忘记了就写在思维导图里面来记忆。感谢大家的收看。