Git入门实践教程

前言

今天才开始学习Git,之前一直是在上面找项目,没有实践过,想着之后工作是一定要用的,就趁着在家赶紧学起来,每天也开始commit,记录一下自己的学习过程,也会放一些自己做的一些小的项目上去。

什么是版本控制

版本控制:记录项目的历史内容变化,以便将来查阅特定版本修订情况的系统。

使用版本控制的好处:

  • 将某个文件回溯到之前的状态。
  • 将整个项目都回退到过去某个时间点的状态
  • 可以查出最后是谁修改了哪个地方,从而找出问题出现的原因
  • 查出谁报告了某个功能缺陷等等。
  • 对于项目的管理非常方便,就算出问题,恢复到原来的模样工作量微乎其微。

关于版本控制系统:

  1. 本地版本控制系统
    多数采用某种简单的数据库记录文件的历次更新差异。
    在这里插入图片描述
    如RCS,它的工作原理是在硬盘上保存补丁集;通过应用程序的所有补丁,可以重新计算出各个版本的内容。

2.集中化的版本控制系统
目的:为了让不同系统上的开发者协同工作
在这里插入图片描述
好处:每个人都可以在一定程度上看到项目中的其他人在做些什么。
坏处:中央服务器单点故障。发生宕机谁都无法提交更新。

3.分布式版本控制系统
客户端不只是提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对仓库的完整备份。
在这里插入图片描述

Git与Github

学一个东西,可以先了解一下它的历史,可以更好的去向别人讲述它。

Linux 之父 Linus 在 1991 年创建开源的 Linux 操作系统之后,多年来依靠全世界广大热心志愿者的共同建设,经过长足发展,现已成为世界上最大的服务器系统。系统创建之初,代码贡献者将源码文件发送给 Linus,由其手动合并。这种方式维持多年后,代码量已经庞大到人工合并难以为继,于是深恶集中式版本控制系统的 Linus 选择了一个分布式商业版本控制系统 BitKeeper,不过 Linux 社区的建设者们可以免费使用它。BitKeeper 改变了 Linus 对版本控制的认识,同时 Linus 发现 BitKeeper 有一些不足,而且有个关键性的问题使之不能被广泛使用,就是不开源。

在 2005 年,BitKeeper 所在公司发现 Linux 社区有人企图破解它,BitKeeper 决定收回 Linux 社区的免费使用权。Linus 对此事调节数周无果,找遍了当时已知的各种版本控制系统,没有一个看上眼的,一怒之下决定自己搞一个。Linus 花了十天时间用 C 语言写好了一个开源的版本控制系统,就是著名的 Git。

2007 年旧金山三个年轻人觉得 Git 是个好东西,就搞了一个公司名字叫 GitHub,第二年上线了使用 Ruby 编写的同名网站 GitHub,这是一个基于 Git 的免费代码托管网站(有付费服务)。十年间,该网站迅速蹿红,击败了实力雄厚的 Google Code,成为全世界最受欢迎的代码托管网站。2018 年 6 月,GitHub 被财大气粗的 Microsoft 收购。2019 年 1 月 GitHub 宣布用户可以免费创建私有仓库。根据 2018 年 10 月的 GitHub 年度报告显示,目前有 3100 万开发者创建了 9600 万个项目仓库,有 210 万企业入驻。

由此我们了解了什么是Git?什么是GitHub?
Git是一个分布式的版本控制系统。
它可以用来管理你的项目,控制版本更迭。我们在本地用git管理的项目,建立的仓库,不需要联网操作。而当我们想把代码开源给别人看,可以注册Github,在这个网站上建立自己远程仓库,用本地的Git与Github关联(这个操作之后会讲到),就可以将我们本地的项目提交到Github中的远程仓库了。

Git简介

概念

引入Git项目三个工作区概念:Git仓库、工作目录以及暂存区域。
本地库(Repository):是Git用来保存项目的元数据和对象数据库的地方(也就是存项目内容)。这是Git中最重要的地方,从其他计算机克隆仓库时,拷贝的就是这里的数据。(就是git init的项目目录产生的.git目录,里面会放入每次提交的版本信息。)
工作区(Workspace):是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你修改或删除。(通俗点就是你电脑上看到的项目目录,这个项目目录下的目录和文件都属于工作区)
暂存区(Index/Stage):是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作‘索引’,不过一般说法还是叫暂存区域。(git add之后,会把文件放到暂存区)
远程仓库(Remote):Github上建立的仓库。

三种状态:
commited(已提交)、modified(已修改)、staged(已暂存)。

Git的特点

1.与其他版本控制工具的区别:在于对待数据的方法。
其他工具大部分以文件变更列表的方式存储信息。示意图如下:
在这里插入图片描述
Git则是把数据看做是对小型文件系统的一组快照。每次你提交更新,或在Git中保存项目状态时,它主要对当时的全部文件制作一个快照,并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git对待数据更像是一个快照流。

2.近乎所有操作都是本地执行
因为你在本地磁盘上有项目完整的历史,所以大部分操作看起来瞬间完成。

3.Git保证完整性
Git所有的数据在在存储前都计算校验和,然后以校验和来引用。采用计算校验和机制叫做SHA-1散列。

Git的安装和使用

Git下载找安装包下载一个,默认安装就好。
安装好了之后,单击右键出现Git GUI和Git Bash之后说明安装成功了。
在这里插入图片描述

git --version可以查看版本号

如果有反应说明安装的Git没有什么问题。

在这里插入图片描述

Git的操作

一般在新的系统上,我们都需要先配置一下自己的Git工作环境。配置工作只需要一次。
Git 提供了叫做git config的命令来配置或读取相应的工作环境。

下面我们来绑定用户信息:
安装完Git的第一点是就是设置你的用户名和邮件地址。因为之后每一个Git的提交都会使用这些信息,并且写入到你的每一次提交之中。

git config --global user.name “John Doe”

git config --global user.email johndoe@example.com

注意:绑定这个邮箱的作用,公司中测试可以测试你提交的代码,然后找到bug,给你的邮箱发邮件,所以邮箱一定要写对。

git config --list可以查看你的配置。

创建版本库
版本库又名仓库,英文repository.可以简单的理解为一个目录,这个目录里面所有的文件都可以被Git管理起来,每个文件的修改和删除,Git都能追踪到,如果出错,将来在某个时刻可以将文件“还原”

初始化仓库:
创建仓库非常简单,在自己计算机上的某个盘创建一个目录。比如,我在D盘写了一个Go项目,路径为D:\Go\Development\src\crawler,我进入目录中,单击右键打开Git Bash,会是这样
在这里插入图片描述

git init 把这个目录变成Git可以管理的仓库,如下:

在这里插入图片描述
再查看,隐藏的项目选中,的情况下,这个目录下就会多一个.git文件.
在这里插入图片描述

git add 实现对指定文件的追踪,然后执行git commit提交

使用git add会将文件添加到暂存区里面去。
如下:我们写一个main.go的内容,不管写什么内容都行。然后用git add +文件名添加到暂存区。
在这里插入图片描述

git commit -m “注释的内容” 告诉git,把文件提交到仓库

在这里插入图片描述

我们将暂存区中的main.go文件提交。如图:

git status 查看是否还有文件未提交

如下图,没有什么文件可提交了。
在这里插入图片描述

修改main.go文件,比如在它里面加上一些字符1111,然后保存,那么main.go已经被追踪了,运行git status命令,会看到下面内容:
在这里插入图片描述
文件main.go发生了变化,显示modified: main.go,表示main.go已经被修改了但是它还没有放到暂存区中去。需要运行git add 命令,之后main.go就会加入到暂存区中去(变成绿色).

这里我们应该要知道,虽然Git可以追踪文件是否被修改,但是文件到底修改了哪些内容,它是不知道的。但是如果我们修改了内容忘记了,现在想知道修改了哪些内容怎么办呢?

使用git diff+文件名,如下:
在这里插入图片描述

但这时,我们再改一下main.go的内容,使用git status查看会发生什么情况?
在这里插入图片描述
我们发现此时main.go同时出现在了暂存区和非暂存区,这是因为之前git add的内容还没有提交,如果现在git commit的话,那么提交的版本会是最后一次运行git add的版本,我们想要让现在版本生效,必须再git add一下。

忽略文件:
创建一个名为.gitignore的文件,列出要忽略的文件模式。

cat .gitignore
.[oa]
~

命令的意思是忽略所有以.o和.a结尾的文件,并且忽略以波浪符(~)结尾的文件。

git diff 查看具体修改了什么地方

版本回退

git log可以查看提交的版本号

如图:
在这里插入图片描述
可以看到,每个提交的版本号,提交时的说明,增加了哪些内容。
那么那个Head->master是什么意思?

git中有HEAD指针,每一个版本可以当作每一个结点,当这个指针指向这个版本结点时,就是之前某一次提交时的状态。master是我们Git仓库的主支,当然我们也可以创建仓库的分支,是什么意思咱门下面再讲。

怎样进行版本回退呢?

1.git reset --hard HEAD^
如果想退回上上个版本就是HEAD^^,以此类推。
2.(1)git reflog
(2)git reset --hard+版本号

第一种方法好理解,比如我们当前版本想退回上一个版本就git reset --hard HEAD^,但是问题是如果要跨越的版本太多怎么办,那么第二种就是很不错的选择。

git reflog
在这里插入图片描述
我们可以清楚简洁的看到每个版本号,比如我们要退到如图的初始版本,版本号为b0b2825,就可以使用命令git reset --hard b0b2825
在这里插入图片描述
我们可以看到版本已经回退到初始版本了。

怎样撤销修改操作?

git checkout +文件名

三种种场景:

  • 1.如果修改了文件,还没放到暂存区,怎么样撤销修改操作?
  • 2.如果添加到暂存区后又进行了修改,怎样回到添加暂存区后的状态?
    还是用上面的命令
  • 3.这个命令还可以撤销删除。比如我们删除了一个文件,只要还没有commit就可以使用这个命令进行撤销删除操作。
    比如:
    在这里插入图片描述

远程库操作Github

1.需要创建SSH key.因为本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要设置。
在你的C盘用户主目录下看看有没有.ssh目录。如果有,看看有没有id_rsa和id_rsa.pub这两个文件,如果有直接跳过,没有的话,就在该目录下打开Git bash输入命令:

ssh-keygen -t rsa -C “youremail@example.com”

在这里插入图片描述
id_rsa是私钥,id_rsa_pub是公钥。
然后登录github,打开“settings”中的SSH Keys页面,然后点击"Add SSH key",填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。
在这里插入图片描述
在这里插入图片描述
这样就成功了。

2.GitHub 首页就是注册页面: https://github.com/,注册Github的账号。

创建远程库:

在这里插入图片描述
在这块创建一个远程仓库,如下图,点击Create repository即可创建。
在这里插入图片描述
我们就成功的创建了这个仓库。
在这里插入图片描述
目前,这个仓库还是空的,我们根据github的提示在本地的仓库下运行命令:

git remote add origin https://github.com/Jayyunghao/crawler.git

然后将本地库的内容推送到远程,使用git push命令,实际上是把当前分支master推送到远程。

git push -u origin master

在这里插入图片描述

现在我们就上传成功了。

由于远程仓库是空的,我们第一次推送加上-u参数,Git不但会把本地的master分支内容推送到远程仓库master,还会将两者相关联起来。之后我们在本地进行改动之后,进行commit之后,只需输入命令,

git push origin master

就推送到了远程仓库了。

怎样克隆现有仓库?
如果你想获得一份已经存在了的Git仓库的拷贝,比如说,你想为某个开源项目贡献自己的一份力,这时就要用到git clone命令。这个命令非常常用!比如这个开源项目,使用下面命令

git clone https://github.com/libgit2/libgit2

在这里插入图片描述

这会在目录下创建一个名为"libgit2的目录",并在这个目录下初始化一个.git文件夹。如果进入到这个新建的libgit2文件夹中,你会发现所有的项目文件已经在里面,准备后续的开发和使用。

如果想自定义克隆仓库名字,可以使用命令:

git clone https://github.com/libgit2/libgit2 mylibgit

创建与合并分支
1.分支的创建

git branch +分支名

2.分支的切换

git checkout +分支名

当然这两句这可以使用这一句命令代替:

git checkout -b +分支名

3.查看当前分支

git branch

4.合并某分支到当前分支

git merge +分支名

5.删除分支

git branch -d +分支名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值