Git 入门教程
1 简介
1.1 概述
Git 是一种分布式版本控制系统,它可以帮助开发者管理和跟踪代码的变化,并且可以方便地协作开发。
| 功能 | 描述 |
|---|---|
| 分布式 | Git 是一种分布式版本控制系统,每个开发者都可以在本地存储代码的完整版本库,并且可以在本地进行版本控制和管理。 |
| 版本控制 | Git 可以帮助开发者跟踪代码的变化,包括新增、修改、删除等操作,并且可以轻松地回溯代码的历史版本。 |
| 分支管理 | Git 支持分支管理,开发者可以轻松地创建、合并、删除分支,方便进行代码的并行开发和测试。 |
| 协作开发 | Git 可以方便地进行协作开发,开发者可以将自己的代码上传到远程仓库,并且可以与其他开发者协同工作。 |
| 安全性 | Git 可以保障代码的安全性,开发者可以设置权限和访问控制,保护代码不被非法访问和篡改。 |
Git 是一种非常重要的版本控制系统,它可以帮助开发者更好地管理和跟踪代码的变化,并且可以方便地协作开发。Git 也是 GitHub 等代码托管平台的基础。
为什么要用 Git?
1.1 版本控制
什么是“版本控制”?我为什么要关心它呢?
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。
有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。
使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。
- 本地版本控制系统
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。
这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异
- RCS
其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。
RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?
- 集中化的版本控制系统
于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。
这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。
而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。
这么做最显而易见的缺点是中央服务器的单点故障。
如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。
本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
- 分布式版本控制系统
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。
在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。
这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。
因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。
籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。
你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
1.2 学习路线
- 阅读 Git 官方文档:Git 官方文档是学习 Git 的最佳资料之一,其中包括了 Git 的基本概念、命令和使用方法等。
- 学习 Git 的基本命令(必做):学习 Git 的基本命令是入门 Git 的基础,可以通过阅读文档或者参考书籍来学习。
- 在 GitHub 上学习 Git(必做):GitHub 是一个基于 Git 的在线代码托管和版本控制平台,可以通过在 GitHub 上创建仓库、提交代码等方式来学习 Git。
- 学习 Git 的高级用法:一旦熟悉了 Git 的基本命令和使用方法,可以开始学习 Git 的高级用法,如分支、合并、重置、回滚等操作,以及如何解决冲突等问题。
- 参加 Git 社区活动:参加 Git 社区活动可以帮助你更好地了解 Git,学习其他开发者的经验和技巧,同时还可以结交志同道合的朋友。
学习 Git 需要不断地阅读文档、实践操作和多交流,才能逐步掌握 Git 的使用方法和技巧。
另外,Learn Git branching网站提供了一种在游戏中学习 Git 的方式,通过完成各个关卡,直观地通过图形熟悉 Git 中的分支、提交等各种概念
2 安装 git
2.1 安装 git
参考 ☞Git 下载与安装
2.2 使用--命令窗口
安装完成后,在文件夹右键
点击git bash here,弹出如下窗口
然后就可以在里面输入各种 git 命令了
这种方式是必须掌握的
2.3 配置 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提交邮件地址
演示
-
随便哪个文件夹,桌面也行,右键--点击
git bash here -
输入这两行代码修改 用户名和邮件地址
-
查看当前的用户名和邮件地址
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 操作
参考:
设置-搜索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 目录 ,变成 已提交 状态
4 基本语法
下面进入 Git 基本语法的学习,指路 ☞Git 基础语法