前言

我们知道我们的文件在需要管理的时候,如果出现崩溃或者文件丢失的情况的时候,就会对管理和工作造成非常严重的影响。而这个时候,我们就需要用到git和github来管理我们所使用的项目,可以帮助管理我们的项目版本。那么,就让我们来了解git和github吧。


一、版本控制

关于版本控制,当我们需要给文件去设置,设计不同的版本,最初的想法可能就是不停的创建文件,复制粘贴。但是这个过程明显是存在缺点的:

因此,我们就需要通过一些方法来方便管理这些文件。

 版本控制软件

版本控制软件是什么呢?我们来了解一下:

那么,用版本控制软件有什么好处呢?有一下这些好处:

知道了版本控制软件的好处之后,我们现在所知道的版本控制软件都有些什么呢?

  1. 分布式版本控制系统:联网运行,支持多人协作开发;性能优秀、用户体颚
  2. 集中化的版本控制系统:联网运行,支持多人协作开发;性能差、用户体验不好
  3. 本地版本控制系统:单机运行,使维护文件版本的操作工具化

让我们分别看看这些控制系统的情况:

本地版本控制系统

集中化的版本控制系统

分布式版本控制系统

我们可以看到,最优秀的系统,就是Git,那么接下来,就让我们来学习Git。


二、Git基础

Git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。
特点:项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性

Git的特性

Git之所以快速和高效,主要依赖于它的如下两个特性:

  • 直接记录快照,而非差异比较
  • 近乎所有操作都是本地执行

SVN的差异比较

传统的版本控制系统(例如SVN)是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累积的差异。

Git的记录快照

Git快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

近乎所有操作都是本地执行

Git中的三个区域和三种状态

使用Git管理的项目,拥有三个区域,分别是工作区、暂存区、Git仓库。

git也有对应三个区域的三种状态:

 注意:

  • 工作区的文件被修改了,但还没有放到暂存区,就是已修改状态。
  • 如果文件已修改并放入暂存区,就属于已暂存状态。
  • 如果Git仓库中保存着特定版本的文件,就属于已提交状态。

基本的 Git工作流程

基本的Git工作流程如下:

  • 在工作区中修改文件
  • 将你想要下次提交的更改进行暂存
  • 提交更新,找到暂存区的文件,将快照永久性存储到Git 仓库


三、安装并配置GIT

在开始使用Git管理项目的版本之前,需要将它安装到计算机上。可以使用浏览器访问如下的网址,根据自己的操作系统,选择下载对应的Git安装包:git

这里需要注意一点:因为git属于外网的网站,如果需要去下载安装包会需要很多的时间,此时你可以选择用加速器或者其他的资源路径前往下载。

这里有安装git的教程

配置用户信息

这里之后的操作,在我们安装了Git之后,找到对应的文件夹右键操作:

  这里只需要我们点击git bash here 就可以打开面板输入下面的指令

安装完Git 之后,要做的第一件事就是设置自己的用户名和邮件地址。因为通过Git对项目进行版本管理的时候,Git需要使用这些基本信息,来记录是谁对项目进行了操作:

Git的全局配置文件

通过git config --global user.name和 git config --global user.email 配置的用户名和邮箱地址,会被写入到C:/Users/用户名文件夹l.gitconfig文件中。这个文件是Git的全局配置文件,配置一次即可永久生效。

检查配置信息

除了使用记事本查看全局的配置信息之外,还可以运行如下的终端命令,快速的查看Git的全局配置信息

获取帮助信息

我们可以通过下图的方式来获得帮助信息:

到这里安装之后的操作就结束了,接下来就是关于git的基础操作内容。


四、GIT基本操作

git的操作有很多,让我们一起来看看吧。

获取GIT仓库的两种方式

  • 将尚未进行版本控制的本地目录转换为Git仓库
  • 从其它服务器克隆一个已存在的Git仓库

以上两种方式都能够在自己的电脑上得到一个可用的Git仓库

在现有目录中初始化仓库

工作区中文件的4种状态

工作区中的每一个文件可能有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指简化了的正则表达式)

glob模式

.gitignore文件的例子

查看提交历史

如果希望回顾项目的提交历史,可以使用git log这个简单且有效的命令。

回退到指定的版本

总结


五、Github

在了解Github之前,我们先来了解一下什么是开源。

开源

什么是开源许可协议

开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议( Open Source License ) 。

常见的5种开源许可协议

这里需要注意,最重要的开源协议就是GPL和MIT,这两个更加常见,使用更多。

为什么要拥抱开源

  • 开源的核心思想是“我为人人,人人为我”,人们越来越喜欢开源大致是出于以下3个原因:
  • 开源给使用者更多的控制权
  • 开源让学习变得容易
  • 开源才有真正的安全
  • 开源是软件开发领域的大趋势,拥抱开源就像站在了巨人的肩膀上,不用自己重复造轮子,让开发越来越容易。

以上理论以了解为主)

开源项目托管平台

专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台主要有以下3个:

  • Github(全球最牛的开源项目托管平台,没有之一)
  • Gitlab(对代码私有性支持较好,因此企业用户较多)
  • Gitee (又叫做码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好)

注意:以上3个开源项目托管平台,只能托管以Git管理的项目源代码,因此,它们的名字都以Git开头。

了解了开源下,最合适使用的项目托管平台是Github,那么就好好学习Github的使用吧。

什么是Github

Github是全球最大的开源项目托管平台。因为只支持Git作为唯一的版本控制工具,故名GitHub。在Github 中,你可以:

  • 关注自己喜欢的开源项目,为其点赞打call
  • 为自己喜欢的开源项目做贡献( Pull Request)
  • 和开源项目的作者讨论Bug和提需求( lssues)
  • 把喜欢的项目复制一份作为自己的项目进行修改(Fork)
  • 创建属于自己的开源项目等等

注册Github账号的流程

访问Github的官网首页

点击“Sign up”按钮跳转到注册页面,填写可用的用户名、邮箱、密码。

这里需要注意,Github是外网地址,那么要用加速器的事情你也明白,不用的话不仅很慢,很可能会卡在注册界面。如果有别的方法的话,可以自己去尝试。

注册完了之后我们就可以开始使用Github了

新建空白远程仓库

请看图解:

按图示方法,点击创造你的远程仓库。这个界面在你完成账号注册之后,只要登录就会显示这个界面。

远程仓库的两种访问方式

Github上的远程仓库,有两种访问方式,分别是 HTTPS和SSH。它们的区别是:

  • HTTPS:零配置;但是每次访问仓库时,需要重复输入Github的账号和密码才能访问成功
  • SSH:需要进行额外的配置;但是配置成功后,每次访问仓库时,不需重复输入Github的账号和密码

注意:在实际开发中,推荐使用SSH的方式访问远程仓库。还需要注意的是,虽然HTTPS的使用,以前只需要输入账号和密码就可以了,但是在前年就发布了无法使用密码的方式来访问,改成了账号和输入token(password)的方式来访问,麻烦程度超过了SSH。

这里提供使用token的方法介绍:如何使用token

基于HTTPS将本地仓库上传到Github

当我们的文件已经提交过一次之后,如果我们还需要提交命令,那么使用git push就可以继续提交

这里需要注意,在你执行下面的代码的时候,因为时代的更新,会有这么一段代码

git branch -M main  Github把原本的master去掉了

那么是怎么回事呢?这里有一篇文章可以告诉我们:Github 太狠了,居然把 "master" 干掉了!

但是这个过程并不影响我们运行。重点是如果我们按照教程里面的方式git bash here打开面板输入的时候,会提示你输入用户名和密码,这个时候输入的我们注册的账号和密码是不行的,要看上面的token的使用方法来输入才能正常的运行。

SSH key

SSH key的作用:实现本地仓库和Github之间免登录的加密数据传输。sSH key的好处:免登录身份认证、数据加密传输。
SSH key由两部分组成,分别是:

  • id_rsa(私钥文件,存放于客户端的电脑中即可)
  • id rsa.pub (公钥文件,需要配置到Github 中)

生成SSH key

  • 打开Git Bash
  • 粘贴如下的命令,并将your_email@example.com替换为注册Github账号时填写的邮箱:
  • ssh-keygen -t rsa -C "your_email@example.com"
  • 连续敲击3次回车,即可在C:\Users\用户名文件夹\.ssh目录中生成 id_rsa和id_rsa.pub两个文件

配置 SSH key

  • 使用记事本打开id_rsa.pub文件,复制里面的文本内容
  • 在浏览器中登录Github,点击头像->Settings -> SSH and GPG Keys -> New SSH key
  • 将id_rsa.pub文件中的内容,粘贴到Key对应的文本框中
  • 在Title文本框中任意填写一个名称,来标识这个Key 从何而来

检测Github的SSH key是否配置成功

基于SSH将本地仓库上传到Github

和HTTPS的方式是一样的,但是更加方便。

将远程仓库克隆到本地

这里附上我的截图来更加细致的说明一下:

上方所说的位置复制链接地址,添加在git clone 的后面,就可以实现了。


六、分支

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。
如果两个平行宇宙互不干扰,那对现在的你也没啥影响。
不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN

其实,分支在实际开发中的作用,就是在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目功能的开发,例如:

master主分支

在初始化本地Git仓库的时候,Git默认已经帮我们创建了一个名字叫做 master的分支。通常我们把这个master 分支叫做主分支。

注意:这里和上述的内容说明了,其实master已经被切换为了main,但是代码大体上是没有问题的,只需要吧master切换成main就可以了。

功能分支

由于程序员不能直接在master分支上进行功能的开发,所以就有了功能分支的概念
功能分支指的是专门用来开发新功能的分支,它是临时从master主分支上分叉出来的,当新功能开发且测试完毕后,最终需要合并到master主分支上,如图所示:

查看分支列表

创建新分支

使用如下的命令,可以基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一样:

切换分支

使用如下的命令,可以切换到指定的分支上进行开发:

分支的快速创建和切换

使用如下的命令,可以创建指定名称的新分支,并立即切换到新分支上:

合并分支

功能分支的代码开发测试完毕之后,可以使用如下的命令,将完成后的代码合并到master主分支上:

删除分支

当把功能分支的代码合并到 master主分支上以后,就可以使用如下的命令,删除对应的功能分支:


注意:如果需要强制删除,则d改成D即可完成

遇到冲突时的分支合并

如果在两个不同的分支中,对同一个文件进行了不同的修改,Git就没法干净的合并它们。此时,我们需要打开这些包含冲突的文件然后手动解决冲突。

手动解决的过程,就是通过打开文件(用vscode打开)

将本地分支推送到远程仓库

如果是第一次将本地分支推送到远程仓库,需要运行如下的命令:

查看远程仓库中所有的分支列表

通过如下的命令,可以查看远程仓库中,所有的分支列表的信息:

跟踪分支

拉取远程分支的最新的代码

这里我们来看看怎么更新github里的代码,打开自己的仓库,然后点击js文件:

就可以打开下面这个界面:

点击铅笔就可以对文件编辑:

之后我们使用git pull就可以吧更新过的js文件下载到本地。

删除远程分支

没有被合并的分支,可能会出现系统提示,不能用普通的删除方法,此时会提示使用-D的方式来删除。

总结


结尾

Git和Github的使用,需要各位自己去自己实际操作一遍,就可以学懂了。多看看总结里需要我们记住的东西,忘记了就写在思维导图里面来记忆。感谢大家的收看。

Git和Github的使用相关推荐

  1. Git与github基本操作

    一.  git安装与简单配置 1.      git的安装 首先进入git的官方网站git-scm.com 下载自己电脑对应的git版本,然后点击安装即可 点击上图的红色部分进行下载 安装的时候直接默 ...

  2. 用 Git 和 Github 提高效率的 10 个技巧!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:segmentfault.com/a/11900000038 ...

  3. 在Pycharm工具中配置集成Git和GitHub

    在Pycharm工具中配置集成Git和GitHub 1.集成Git. 打开Pycharm,  点击File-->Settins-->Version Control-->Git 然后在 ...

  4. R,Git和Github(下)

    作者:Wenhu 博客:http://bioinfostar.com/ 本讲第一部分,介绍git的"足够你用"命令:本讲为第二部分,介绍github的主要用途,包括版本管理.分枝管 ...

  5. clone git 修改保存路径_Git和Github详细入门教程(别再跟我说你不会Git和Github)

    前言:成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成.你好,我是梦阳辰,快和我一起搞定Git和Github吧. 文章目录 01.Git概述 02.Git的本地仓库操作 Git的版本回退操作 ...

  6. 关于Git和Github你不知道的十件事

    Git 和 GitHub都是非常强大的工具.即使你已经使用他们很长时间,你也很有可能不知道每个细节.我整理了Git和GitHub可能提高日常效率的10个常用技巧. GitHub 快捷键: t 和 w ...

  7. Windows 下使用Git管理Github项目

    Git Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得 ...

  8. 用Git向gitHub上传项目

    用Git向gitHub上传项目 1.安装git 2.在git安装目录下,运行git-bash.exe  如图所示 3.在git中绑定你注册gitHub是的用户名.邮箱. $ git config -- ...

  9. git和github的关系

    写在前面:我身边好多人问我git和github的区别,想必对于好多人没学过的大佬们恐怕也是一脸懵逼,但是不知道也是不行的,所以我今天就来讲一讲这二者的区别和联系. 用一句话形容这二者的关系:git是弓 ...

  10. git push github SSL报错处理

    本文仅供学习交流使用,如侵立删!demo下载见文末 git push github SSL报错 问题:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connect ...

最新文章

  1. 用Windows Live Writer离线更新博思日志
  2. Objective-C( Foundation框架 一 常见的结构体)
  3. hive遍历_Hive解析流程-抽象语法树生成
  4. 成长 工作 游戏 英语 阅读
  5. 第七周作业-任务分解
  6. POJ 3764 The Xor-longest Path 题解
  7. 突破Edge浏览器的签名验证机制
  8. 【报告分享】2021巨量引擎日化行业年度报告-巨量算数(附下载)
  9. 2007山东公务员面试真题汇总
  10. python采集付费论文批量下载 并保存到文档,毕设论文再也不愁......
  11. 微信企业号用户验证php,企业号OAuth2.0验证企业用户接口
  12. JAVA中native方法调用C语言实现学习
  13. 【总结】Android的16ms和垂直同步以及三重缓存
  14. VMWare网络模式(Centos7)
  15. 03.random_forest_demo
  16. 利用SMB实现局域网共享文件夹
  17. Swift - 第三方图表库Charts使用详解23(雷达图)
  18. 无法将“webpack”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
  19. WM5的智能手机D600共享电脑上网设置
  20. matlab机器人工具箱学习

热门文章

  1. 【124】JavaScript获取下一个、上一个兄弟节点
  2. 第二章:如何撰写学术论文(文科)
  3. React构造函数中为什么要写 super(props)
  4. openflow初学者入门笔记一(openflow 1.0 and openflow 1.3)
  5. 标准代码及数据字典的实现
  6. 数说故事「行业热点快报」连锁餐饮行业企业动态
  7. [XDOJ]矩阵相乘
  8. 三阶交调(三阶互调) IP3
  9. Your Freedom — 跨平台的代理软件
  10. 计算机应用投稿建议,计算机类核心期刊投稿心得【转】 - 计算机软件及计算机应用 - 电子技术及信息科学 - C......