1 版本控制工具简介
1.1 版本控制意义
- 清晰明了的表示各种文件或者项目的版本更新内容
- 能够在发生意外时通过版本控制进行恢复,恢复到以前的某个文件/项目版本
- 协同工作,提升工作效率
1.2 版本控制的发展历程
- 起源:diff和patch两种操作,diff记录当前文件/项目与原始文件/项目的区别,patch反向操作,恢复原始文件/项目
- RCS:通过将diff和patch的获取的文件保存到本地磁盘,存在一定的限制
- CVS/SVN:集中式版本控制工具,设置服务端保存文件/项目版本,可以进行协同合作,但是设置单点服务器存在数据安全等问题
- Git:分布式版本控制工具,以快照的方式记录所有版本的数据,并且以分布式形式进行交互,提高协同工作的效率与安全性
1.3 小结
- 版本控制工具的发展历史经过:原始人工维护状态,本地RCS,集中式如VCS、SVN和分布式如Git。
- 版本控制工具提供了协作开发的能力,借助它们我们可以回到任何时间的代码状态。
- 集中式版本控制工具,几乎所有的动作都需要服务器参与,并且数据安全性与服务器关系很大。
- Git 是分布式版本控制工具,除了与服务器之前进行按需同步之外,所有的提交操作都不需要服务器
2 Git安装与配置
2.1 Windows安装Git
- 安装包:下载安装包
- 去掉git-lfs
- 不修改path环境变量
2.2 Linux安装Git
- 安装包:下载安装包
- 包管理器方式安装
- Ubuntu 或者 Debian 系统
sudo aptitude install git sudo aptitude install git-doc git-svn git-email gitk - RHEL、Fedora或者CentOS系统
yum install git yum install git-svn git-email gitk - 源代码安装
- 安装源码包git-2.19.0.tar.gz
tar -jxvf git-2.19.0.tar.bz2 cd git-2.19.0 - 参照INSTALL文件进行安装,设置安装目录
make prefix = /user/local all sudu make prefix = /user/local install - 安装Git文档*
make prefix=/user/local doc info sudo make prefix=/user/local install-doc install-html install-info
2.3 配置Git
- 命令自动补全
- 将Git源码包中的命令补齐脚本复制到bash-completion对应的目录中
cp contrib/completion/git-completion.bash /etc/bash_completion.d/ - 重新加载自动补齐脚本,使之在当前shell中生效
. /etc/bash_completion - 为了能够在终端开启时自动加载bash_completion脚本,需要在本地配置文件~/.bash_profile或全局文件/etc/bashrc文件中添加下面的内容
if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi - 配置个人身份
git config --global user.name "zhangsan" git config --global user.email zs123@163.com - 文本换行符配置(windows行尾标识crlf,Linux行尾标识lf)
- Windows下设置自动转换
git config --global core.autocrlf true - Linux签入时转换
git config --global core.autocrlf input - Windows上开发,不需转换
git config --global core.autocrlf false - 文本编码配置
- 文本设置成支持中文
git config --global gui.encoding utf-8 - 存储log时采用中文
git config --global i18n.commitencoding utf-8 - 查看log时中文显示
git config --global i18n.logoutputencoding utf-8 - 支持中文路径
git config --global core.quotepath false - 与服务器的认证配置
- http/https协议认证
- 设置口令缓存
git config --global credential.helper store - 添加HTTPS证书信任
git config http.sslverify false - ssh认证配置
- 生成公钥与秘钥
ssh-keygen -t rsa -C zs123@163.com - 找到对应的公钥添加即可
- 附录:
- 系统配置
git config --system core.autocrlf - 用户配置
git confug --global user.name - 仓库配置
git config --local remote.origin.url
2.4 小结
- Linux 下安装 Git 可以通过系统的包管理器安装,也可以通过下载源码编译安装。
- .Windows 下使用 Git 有两种不同的方案:Git 原生安装包与图形化界面工具 TortoiseGit。
- 通过 Git的配置命令,我们可以对个人身份、文本换行符、编码显示等进行配置。
3 Git基本命令
3.1 基本命令前置概念及总览
- Git版本控制下的三种工程区域
- 版本库(Repository)
在工作区中有一个隐藏目录git,这个文件夹就是Git的版本库,里面存 放了Git用来管理该工程的所有版本数据,也可以叫本地仓库。 - 工作区(Working Directory)
日常工作的代码文件或者文档所在的文件夹。 - 暂存区(stage)
一般存放在工程根目录.git/index文件中,所以我们也可以把暂存区叫作索引(index)。 - Git版本控制下的文件状态
- 已提交(committed)
该文件已经被安全地保存在本地数据库中了; - 已修改(modified)
修改了某个文件,但还没有提交保存; - 已暂存(staged)
把已修改的文件放在下次提交时要保存的清单中。
3.2 常用命令
- 工程准备
- 克隆远端工程到本地磁盘
git clone [URL] 或者git lfs clone [URL] - 新建git项目仓库
git init firstObject - 新增、删除、移动文件到暂存区
- 把文件添加到暂存区
git add 文件名/.(所有文件) - 将指定文件从当前节点的暂存区删除
git rm 文件名 - 移动文件和重命名文件
git mv 源文件 目标位置或者目标文件名 - 查看工作区
- 显示工作目录和暂存区的情况
git status - 比较项目中任意两个版本(分支)之间的差异或者当前索引与上次提交的差异
- 两个节点的差异
git diff 节点1 节点2 - 两个分支的差异
git diff 分支1 分支2 - 当前索引和上次提交的差异
git diff --cached - 仅仅查看比较的差异文件 在Git diff 后面添加
--name-status - 提交更改的文件
- 将暂存区文件提交到本地版本库
git commit 文件名 -m 提交相关信息 - 将所有暂存区文件提交到本地版本库
git commit -am 相关修改信息 - 修改相关描述信息
git commit --amend - 查看日志
git log [-num] [--name-status] - 推送远端仓库
- 将本地版本库中的分支推送到远端服务器上对应的分支
git push origin(通常远端服务器的名字) 分支名字 - 本地分支名与远端分支名不同
git push origin 远端分支名:本地分支名 - 分支管理
- 查看本地工程的所有分支
git branch - 查看远端工程的所有分支
git branch -r - 查看本地和远端工程的所有分支
git branch -a - 新建分支
git branch 新分支名 或者git checkout -b 新分支名(自动切换到新建分支) - 删除本地分支
git branch -d 或者git branch -D(强制删除) - 删除远端分支
git branch -r -d 对应远端的本地分支名 删除后需要重新推送git push origin:本地分支名 - 切换分支
git checkout -f(强制切换) 分支名 - 从远端获取更新的分支并与本地分支合并
git pull origin 远端分支名:本地分支名 如果远端与本地分支名称相同,只需一个名称即可 - 获取远端仓库的某个更新的分支到本地仓库
git fetch origin 远端分支名:本地分支名 - 分支合并
- 从指定分支合并到当前分支
git merge 分支名 - 另一种合并方式
git rebase 分支名 - 撤销操作
- 撤销当前工作区的某些add/commit操作
git reset 提交ID - 回退本地所有修改而未提交的文件
git checkout . - 回退本地指定文件
git checkout -文件名 - 回退到历史某个版本
git checkout 提交ID
3.3 小结
- 在最简单的开发场景下正确理解Git基本命令
- 利用Git命令交互提示自主解决问题
- 理解不同的Git命令对远端服务器仓库和本地仓库的影响
4 分支合并过程中的冲突处理
4.1 冲突
- 两个分支的提交版本对同一文件具有不同的修改
- 分支合并过程中不知道以哪个提交版本为基础
4.2 解决
- 查看conflict提示,修改对应冲突文件内容
- 将修改后的文件重新add和commit
- 自动完成分支合并
4.3 比较两次提交版本的差异
git diff commit_id1 commit_id2 - commit_id可以只输入前几位,而不需要全部复制粘贴
5 撤销操作
- 回复到上次提交
git reset --hard commit_id - 在add之前的修改进行恢复
git checkout filename - 查看之前所有的命令
git reflog
|