1. 版本控制类型 版本控制系统模型包括两大主要类型:
集中式模型 - 所有用户都连接到一个中央的主仓库(master repository)
分布式模型 - 每个用户都在自己的计算机上拥有完整的仓库
What is version control: centralized vs. DVCS 分散式版本控制
2. 术语 版本控制系统 / 源代码管理器 版本控制系统
(简称VCS
)是一个管理源代码不同版本的工具。源代码管理器
(简称 SCM
)是版本控制系统的另一个名称。
Git 是一个 SCM(因此也是 VCS!)。Git 网站的 URL 是 https://git-scm.com/ (注意它的域名中直接包含“SCM”!)。
提交(Commit) Git 将数据看做微型文件系统的一组快照。每次 commit
(在 Git 中保持项目状态),它都对文件当时的状况拍照,并存储对该快照的引用。你可以将其看做游戏中的保存点,它会保存项目的文件和关于文件的所有信息。
你在 Git 中的所有操作都是帮助你进行 commit,因此 commit 是 Git 中的基本单位。
仓库(Repository / repo) 仓库是一个包含项目内容以及几个文件(在 Mac OS X 上默认地处于隐藏状态)的目录,用来与 Git 进行通信。仓库可以存储在本地,或作为远程副本存储在其他计算机上。仓库是由 commit 构成的。
工作目录 / 工作区(Working Directory) 工作目录是你在计算机的文件系统中看到的文件。当你在代码编辑器中打开项目文件时,你是在工作目录中处理文件。
与这些文件形成对比的是保持在仓库中(在 commit 中!)的文件。
在使用 Git 时,工作目录与命令行工具的 current working directory
(当前工作目录)不一样,后者是 shell 当前正在查看的目录。
检出(Checkout) 检出是指将仓库中的内容复制到工作目录下。
暂存区 / 暂存索引 / 索引(Staging Area / Staging Index / Index) Git 目录下的一个文件,存储的是即将进入下个 commit 内容的信息。可以将暂存区看做准备工作台,Git 将在此区域获取下个 commit。暂存索引中的文件是准备添加到仓库中的文件。
SHA SHA 是每个 commit 的 ID 编号。以下是 commit 的 SHA 示例:e2adf8ae3e2e4ed40add75cc44cf9d0a869afeb6。
它是一个长 40 个字符的字符串(由 0–9 和 a–f 组成),并根据 Git 中的文件或目录结构的内容计算得出。SHA 的全称是”Secure Hash Algorithm”(安全哈希算法)。
分支(Branch) 分支是从主开发流程中分支出来的新的开发流程。这种分支开发流程可以在不更改主流程的情况下继续延伸下去。
回到之前关于游戏保存点的示例,你可以将分支看做在游戏中设立保存点后,尝试一个有风险的招式。如果有风险的招式不奏效,则回到保存的位置。令分支非常强大的关键之处是你可以在一个分支上设定保存点,然后切换到另一个分支并继续设定保存点。
3. git设置 1 2 3 4 5 6 7 8 9 10 11 12 13 # 设置你的 Git 用户名 git config --global user.name "<Your-Full-Name>" # 设置你的 Git 邮箱 git config --global user.email "<your-email-address>" # 确保 Git 输出内容带有颜色标记 git config --global color.ui auto # 对比显示原始状态 git config --global merge.conflictstyle diff3 git config --list
Atom Editor 设置
git config --global core.editor "atom --wait"
3. git init 运行 git init
命令会初始化 Git 跟踪所有内容会用到的所有必要文件和目录。所有这些文件都存储在叫做 .git
(隐藏目录)的目录下。这个.git
目录是一个库!Git 会将所有 commit
记录在这里,并跟踪所有内容!
.git 目录内容
配置文件 - 存储了所有与项目有关的配置设置。
description 文件 - 此文件仅用于 GitWeb 程序,因此可以忽略
hooks 目录 - 我们会在此处放置客户端或服务器端脚本,以便用来连接到 Git 的不同生命周期事件
info 目录 - 包含全局排除文件
objects 目录 - 此目录将存储我们提交的所有 commit
refs 目录 - 此目录存储了指向 commit 的指针(通常是“分支”和“标签”)
Git 内部原理 - 底层命令和高层命令
自定义 Git - Git Hooks
在现有目录中初始化仓库 git init 文档 git init 教程
4. git clone 验证终端位置 提示:在克隆任何内容之前,确保命令行工具已定位于正确的目录下。克隆项目会新建一个目录,并将克隆的 Git 仓库放在其中。问题是无法创建嵌套的 Git 仓库。因此,确保终端的当前工作目录没有位于 Git 仓库中。如果当前工作目录没有在 shell 的提示符中显示,输入 pwd 输出工作目录。
git clone 命令用于创建一个与现有仓库完全相同的副本。
$ git clone <path-to-repository-to-clone>
该命令:
会获取现有仓库的路径
默认地将创建一个与被克隆的仓库名称相同的目录
可以提供第二个参数,作为该目录的名称
将在现有工作目录下创建一个新的仓库
克隆现有仓库 git 克隆文档 git 克隆教程
more...