Git 入门教程

134 阅读10分钟

Git 入门教程

1 简介

1.1 概述

Git 是一种分布式版本控制系统,它可以帮助开发者管理和跟踪代码的变化,并且可以方便地协作开发。

功能描述
分布式Git 是一种分布式版本控制系统,每个开发者都可以在本地存储代码的完整版本库,并且可以在本地进行版本控制和管理。
版本控制Git 可以帮助开发者跟踪代码的变化,包括新增、修改、删除等操作,并且可以轻松地回溯代码的历史版本。
分支管理Git 支持分支管理,开发者可以轻松地创建、合并、删除分支,方便进行代码的并行开发和测试。
协作开发Git 可以方便地进行协作开发,开发者可以将自己的代码上传到远程仓库,并且可以与其他开发者协同工作。
安全性Git 可以保障代码的安全性,开发者可以设置权限和访问控制,保护代码不被非法访问和篡改。

Git 是一种非常重要的版本控制系统,它可以帮助开发者更好地管理和跟踪代码的变化,并且可以方便地协作开发。Git 也是 GitHub 等代码托管平台的基础。

为什么要用 Git?

1.1 版本控制

什么是“版本控制”?我为什么要关心它呢?

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。

有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。

  1. 本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。

这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异

  1. RCS

其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。

RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?

  1. 集中化的版本控制系统

于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。

这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

多年以来,这已成为版本控制系统的标准做法。

这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。

而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。

这么做最显而易见的缺点是中央服务器的单点故障。

如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

  1. 分布式版本控制系统

于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。

在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。

这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。

因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。

籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。

你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

1.2 学习路线

  1. 阅读 Git 官方文档Git 官方文档是学习 Git 的最佳资料之一,其中包括了 Git 的基本概念、命令和使用方法等。
  2. 学习 Git 的基本命令(必做):学习 Git 的基本命令是入门 Git 的基础,可以通过阅读文档或者参考书籍来学习。
  3. 在 GitHub 上学习 Git(必做):GitHub 是一个基于 Git 的在线代码托管和版本控制平台,可以通过在 GitHub 上创建仓库、提交代码等方式来学习 Git。
  4. 学习 Git 的高级用法:一旦熟悉了 Git 的基本命令和使用方法,可以开始学习 Git 的高级用法,如分支、合并、重置、回滚等操作,以及如何解决冲突等问题。
  5. 参加 Git 社区活动:参加 Git 社区活动可以帮助你更好地了解 Git,学习其他开发者的经验和技巧,同时还可以结交志同道合的朋友。

学习 Git 需要不断地阅读文档、实践操作和多交流,才能逐步掌握 Git 的使用方法和技巧。

另外,Learn Git branching网站提供了一种在游戏中学习 Git 的方式,通过完成各个关卡,直观地通过图形熟悉 Git 中的分支、提交等各种概念

2 安装 git

2.1 安装 git

参考 ☞Git 下载与安装

2.2 使用--命令窗口

安装完成后,在文件夹右键

3.png

点击git bash here,弹出如下窗口

1.png

然后就可以在里面输入各种 git 命令了

这种方式是必须掌握的

2.3 配置 git

初次运行 Git 前的配置

主要是配置用户信息,包括用户名和邮件地址

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。

这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:

2.3.1 全局配置

$ git config --global user.name "xxx"                 # 全局配置git提交用户名
$ git config --global user.email "xxx@example.com"    # 全局配置git提交邮件地址
$ git config --global user.name                       # 查看全局配置git提交用户名
$ git config --global user.email                      # 查看全局配置git提交邮件地址

演示

  1. 随便哪个文件夹,桌面也行,右键--点击git bash here

  2. 输入这两行代码修改 用户名和邮件地址

  3. 查看当前的用户名和邮件地址

6.png

2.3.2 局部的配置

局部的命令比全局少个 --global

$ git config user.name "xxx"                          # 配置当前文件夹git提交用户名
$ git config user.email "xxx@example.com"             # 配置当前文件夹git提交邮件地址
$ git config --global user.name                       # 查看当前文件夹git提交用户名
$ git config --global user.email                      # 查看当前文件夹git提交邮件地址

如果想要在某个文件夹提交想用别的用户名和邮箱地址,可以单独在这个文件夹设置

2.4 在 VSCode 中集成 git bash

VSCode 本身没有集成 git,要进行 git 操作,都要在文件夹中右键 git bash here 进行操作。

在下方的这个终端打开,本身是没有 git bash 的,经常使用 vscode 的开发者,也会在 vscode 中集成 git bash,这样就可以直接在编辑器里进行 git 操作

4.png

参考:

设置-搜索terminal.integrated.defaultProfile.windows,在setting.json中打开

"terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell"
        },
        "Command Prompt": {
            "path": [
                "${env:windir}\\Sysnative\\cmd.exe",
                "${env:windir}\\System32\\cmd.exe"
            ],
            "args": [],
            "icon": "terminal-cmd"
        },
        "Git Bash": {
            "source": "Git Bash",
        },
    },
    // "remote.SSH.useLocalServer": true

改为

"terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell"
        },
        "Command Prompt": {
            "path": [
                "${env:windir}\\Sysnative\\cmd.exe",
                "${env:windir}\\System32\\cmd.exe"
            ],
            "args": [],
            "icon": "terminal-cmd"
        },
        "GitBash": {
            "path": "F:\\Git\\bin\\bash.exe"
        },
    },
    // "remote.SSH.useLocalServer": true
    "terminal.integrated.defaultProfile.windows": "GitBash",

注意:

  • GitBash 中间没有空格
  • 去掉 source ,加上 path 路径为自己电脑上 bash.exe 的位置
  • 加上 "terminal.integrated.defaultProfile.windows": "GitBash",

3 基本概念

3.1 三种状态

Git 有三种状态,每个文件可能处于其中之一:

  • 已修改modified:修改了文件,但还没保存到数据库中
  • 已暂存staged:对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交committed:数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

  • 工作区working:对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区Staging Area:一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
  • Git 仓库目录Git directory: Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

基本的 Git 工作流程如下:

  • 工作区 中修改文件,变成 已修改 状态
  • 将你想要下次提交的更改选择性地暂存,这样会将更改的部分添加到 暂存区 ,变成 已暂存 状态
  • 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录 ,变成 已提交 状态

areas.png

4 基本语法

下面进入 Git 基本语法的学习,指路 ☞Git 基础语法