导图社区 精通 Git 第二版(Pro Git )第一章:入门
Git 仅用了几年时间就一跃成为了几乎一统商业及开源领域的版本控制系统。本思维导图全面介绍Git 进行版本管理的基础和进阶知识。全书共10 章,内容由浅入深,展现了普通程序员和项目经理如何有效利用Git提高工作效率,掌握分支概念,灵活地将Git 用于服务器和分布式工作流,如何将开发项目迁移到Git,以及如何高效利用GitHub。
编辑于2019-07-28 08:48:21科目三:广东省广州市天河区华观路考场考试笔记,本人考试满分通过写此笔记以供后人学习参考。笔记内容仅供学习参考,不可满目照搬因此造成的后果本人概不负责,考生因以实际考试要求为准。
2.1 获取 GIt 仓库 2.2 在 Git 仓库中记录变更 2.3 查看提交历史 2.4 撤销操作 2.5 远程仓库的使用 2.6 标记 2.7 Git 别名 2.8 小结
Git 仅用了几年时间就一跃成为了几乎一统商业及开源领域的版本控制系统。本思维导图全面介绍Git 进行版本管理的基础和进阶知识。全书共10 章,内容由浅入深,展现了普通程序员和项目经理如何有效利用Git提高工作效率,掌握分支概念,灵活地将Git 用于服务器和分布式工作流,如何将开发项目迁移到Git,以及如何高效利用GitHub。
社区模板帮助中心,点此进入>>
科目三:广东省广州市天河区华观路考场考试笔记,本人考试满分通过写此笔记以供后人学习参考。笔记内容仅供学习参考,不可满目照搬因此造成的后果本人概不负责,考生因以实际考试要求为准。
2.1 获取 GIt 仓库 2.2 在 Git 仓库中记录变更 2.3 查看提交历史 2.4 撤销操作 2.5 远程仓库的使用 2.6 标记 2.7 Git 别名 2.8 小结
Git 仅用了几年时间就一跃成为了几乎一统商业及开源领域的版本控制系统。本思维导图全面介绍Git 进行版本管理的基础和进阶知识。全书共10 章,内容由浅入深,展现了普通程序员和项目经理如何有效利用Git提高工作效率,掌握分支概念,灵活地将Git 用于服务器和分布式工作流,如何将开发项目迁移到Git,以及如何高效利用GitHub。
精通 Git 第二版(Pro Git )第一章 入门
什么是 “版本控制”
版本控制是一套系统,该系统是按时间顺序记录某一个或一系列文件的变更,让你可以查看其以前的特定版本。
本书以软件源码文件为例讲解了版本控制的方法,实际上这种方法对于计算机上几乎所有文件类型都适用。
本地版本控制系统
时间戳
更改时复制
RCS
等
方法简单,容易出错
集中式版本控制系统(CVCS)
CVS
Subversion
Perforce
存在单点故障,服务器宕机期间任何人都不能写作或提交更改
分布式版本控制系统(DCVS)
Git
Mercurial
Bazaar
Darcs
每一次检出操作实际上都是对数据的一次完整备份
Git 简史
Linux 内核是一个超大规模的开源软件项目,在 Linux 内核大部分的维护时间内(1991-2002),其更新都是通过传递补丁和压缩文件来实现,在 2002 年,Linux 内核项目开始采用一个叫作 BitKeeper 的专有分布式版本控制系统。 2005 年,Linux 内核开发者社区与 BitKeeper 的研发公司关系破裂,该公司收回了软件的免费使用权。这使 Linux 开发者社区(尤其是 Linux 之父 林纳斯·托瓦兹)在汲取 BitKeeper 使用过程中的经验教训的基础上,开发出了自己的版本控制系统,新系统的一些目标如:
速度快
设计简洁
对于非线性开发强有力的支持(数以千计的并行分支)
完全的分布式设计
能够有效地处理像 Linux 内核这种大型项目(速度以及数据量)
Git 基础
快照,而非差异
Git 与其他版本控制系统(包括 Subversion 等)最大的不同在于其对待数据的方式。
Git 更多的是将数据作为一个快照流。
从概念上来说,其他大多数的版本控制系统以文件变化列表的方式储存信息,
这类系统(CVS,Subversion,Perforce,Bazaar 等)将其储存的信息视为一组文件以及对这些文件随时间所做出的变更。
Git 将数据视为一个微型文件系统的一组快照。
每次提交或在 Git 中保存项目的状态时,Git 基本上回抓取一张所有文件当前状态的快照,然后储存一个指向该快照的引用。
出于效率的考虑,如果文件没有发生变更,Git 则不会再重新保存文件,而是留下一个指向先前已保存过的相同文件的链接。
几乎所有操作都在本地执行
Git 中的大部分操作只需要用到本地文件和资源,一般无需从网络中的其他计算机中获得信息。
浏览历史提交记录
比较文件差异
离线操作,在线上传
等
Git 的完整性
Git 中的所有数据在储存前都会执行校验和计算,随后以校验和来引用对应的数据。
这意味着不可能在 Git 不知情下的情况下更改文件或目录的内容。
它能检测出传输过程中丢失的信息或者受损的文件
Git 所采用的校验和机制是 SHA-1 散列。
这是一个由 40 个十六进制字符(0-f)所组成的字符串,它是根据文件内容或 Git 目录结构计算所得到
实际上 Git 并不是通过文件名在数据库中存储信息,而是通过信息的散列值
Git 通常只增加数据
当你在 Git 中进行处理时,基本上所有的操作都只是向 Git 数据库中添加数据。
很难让系统执行无法撤销的操作或是把数据搞丢
与其他版本控制系统一样,在 Git 中你有可能回弄丢或弄乱尚未提交的变更,不过一旦向 Git 提交了快照,那就不太可能回丢失,尤其是在你还会定期向其他仓库推送数据库时,
Git 三种状态
已提交 (committed)
表示数据已被安全的存入本地数据库中
已修改 (modified)
表示已经变更文件,但尚未提交到数据库中
已暂存 (staged)
表示对已修改的文件的当前版本做出了标识并将其加入下一次要提交的快照中
由此便引入了 Git 项目中三个主要的区域
工作目录
某个版本的单次检出
这些文件从 Git 目录下的压缩数据库内被提取出来,放置在磁盘上以供使用或修改
暂存区
暂存区是一个文件,一般位于 Git 目录中。有时候它也被称为“索引”,不过通常还是叫作暂存区。
它保存了下次所要提交内容的相关信息。
Git 目录 (仓库)
Git 保存项目元数据和对象数据的地方
这是 Git 最重要的地方,也是从其他计算机中克隆仓库时需要复制的内容
Git 的基本工作流程
1.修改工作目录中文件
如果在上次检出之后文件发生变更,但没有被暂存,则处于已修改状态。
2.暂存文件,将这些文件的快照加入暂存区
如果这个文件已被修改,并且已被放入暂存区,那么它就处于已暂存状态。
3.提交暂存区中文件,将快照永久地保存在 Git 目录中
如果一个文件的某个特定版本出现在 Git 目录中,该版本的文件就被认为处于已提交状态。
Git 命令行
命令行是唯一可以执行所有 Git 命令的地方,大多数 GUI 处于简化的目的,只实现了 Git 部分功能。
如果你知道如何使用命令行,那大概也能猜出如何使用 GUI,但反过来可就不一定
打开终端
Windows
Power Shell
CMD
CMDER
推荐使用 CMDER(https://github.com/cmderdev/cmder)
MAC OS
Homebrew
推荐使用 TUNA 的镜像站,配置方法如下: git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git brew update
Linux
Zsh
推荐使用 ZSH (https://github.com/robbyrussell/oh-my-zsh)
bash
Windows-terminal
安装 Git
Linux 下
sudo <包管理器> install git-all
yum
apt-get
pacman
dnf
等 包管理器
通过 Git 官网下载二进制包安装最新
Mac 下
最简单的方式是安装 Xcode 会自动检测 Git 环境
在终端输入 git 系统会自动检测
通过 Git 官网下载二进制包安装最新
Windows 下
通过 Git 官网下载二进制包安装最新
Cmder 自带 Git 环境
通过源码安装
依赖库
curl
zlib
openssl
expat
libiconv
YUM
sudo yum install curl-devel expat-devel gettext-devel \ openssl-devel perl-devel zlib-devel
依赖包
sudo yum install asciidoc xmlto docbook2X
文档依赖(doc html info)
sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi
Fedora/RHEL/RHEL衍生版,由于二进制文件名不同需要创建软链接
APT-GET
sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev
依赖包
sudo apt-get install asciidoc xmlto docbook2x
文档依赖(doc html info)
下载 Git 源码
https://git.kernel.org/
https://github.com/git/git
编译 Git
tar -xvf git*.tar.gz
* 通配符,根据所下载的具体版本号确定
cd git*
* 通配符,根据所下载的具体版本号确定
make configure
./configure --prefix=/usr
make all doc info
sudo make install install-doc install-html install-info
后续更新
git clone git://git.kernel.org/pub/scm/git/git.git
首次配置 Git
git config
/etc/gitconfig 文件
包含了系统中所有用户及其仓库的值
使用 git config --system 将会读写该配置文件
~/.gitconfig 或 ~/.config/git/config
作用于当前用户
使用 git config --global 将会读写该配置文件
.git/config
作用与当前仓库
每一级都会覆盖上一级的设置
因此 .git/config 中的值要高于 /etc/gitconfig 中的值
在 Windows 中
Git 会在 $HOME 目录中( C:\Users\$USER)查找 .gitconfig
也查找 /etc/gitconfig 相对于 MS 的根目录
该目录实在安装程序运行时你所选的安装目录
用户身份
git config --global user.name "用户名"
git config --global user.email "电子邮箱"
--global 选项是全局配置
如果想在一个仓库中使用不同用户名和电子邮箱来提交的话,在仓库中不使用带 --global 选项参数。
个人编辑器
git config --global core.editor 文本编辑器
vim
emacs
gedit
在 Windows x86 上
git config --global core.edieor "'D:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession"
在 Windows x64 上
git config --global core.edieor "'D:/Program Files/Notepad++/notepad++.exe' -multiInst"
检测个人设置
git config --list
查看当前 Git 所有的设置
git config user.name
git config user.email
git config <键>
键值对(key -> value)
查看当前 Git 某个设置
获取帮助
git help <verb>
git help config
git <verb> --help
git config --help
man git-<verb>
man 环境下有效
man git-add
man 环境下有效