Git
介绍
版本控制的概念
是一种在开发过程中,用于方便管理我们(多人协作)的代码、修改、版本、工程修改,便于查看历史记录、备份、恢复以前版本的技术。
版本控制器的三种类型
1.本地版本控制
记录文件每次的更新,对每一个版本做一个快照存储在本地计算机(适合个人。如rcs)
2.集中版本控制
所有数据统一在远程服务器上,本地只有以前版本的数据,使用前需要从远程服务器上同步到本地,在修改编辑,上传到远程服务器。
(如SVN,CVS,VSS)
3.分布式版本控制
所有文件都可以同步到本地计算机仓库,然后在同步到远程服务器。相当于每个本地计算机都是一个仓库,但还是要上传到统一的远程服务器。
如Git。
Git的历史
Git是linux系统创始人linus两周开发出来的,是为了便于管理linux系统开源社区的代码的协同开发,减少工作量,提高开发效率。
Git的使用
Git基本介绍
安装与环境配置
安装
windows:一直点下一步就行了
linux:
环境配置
配置命令
git config -l #查看配置
git config --system --list #查看系统配置
git config --global --list #查看当前用户配置
注意事项
Git相关的配置文件:
-
Git\mingw64\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级
-
C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 --global 全局
这里可以直接编辑配置文件,通过命令设置后会响应到这里。
设置用户名与邮箱(非常重要)
当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都
会使用该信息。它被永远的嵌入到了你的提交中:
git config --global user.name "kuangshen" #名称
git config --global user.email [email protected] #邮箱
只需要做一次这个设置,如果你传递了--global 选项,因为Git将总是会使用该信息来处理你在系统中所
做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行
该命令而不要--global选项。 总之--global为全局配置,不加为某个项目的特定配置。
Git的三种终端介绍
Git Bash
类似于Unix、Linux的终端操作。
常用命令
cd #进入目录
ls #列出目录下的文件
mkdir #创建一个目录
toush #创建一个文件
rm -ft #删除文件或目录
mv #移动文件或目录
cp #复制文件或目录
pwd #显示当前路径
clear #清理当前终端界面
reset #重启终端
history #列出历史命令
Git CMD
类似于Windows的终端操作
Git GUI
Git的图形操作界面
Git的基本理论与操作流程
基本理论
Git的四个工作区域
- 工作目录:编写、存放代码的文件目录
- 暂存区:暂时存储工作区代码的修改,实质上是一个文件记录版本的修改
- 资源区:本地版本存储仓库
- 远程存储库:远程统一的代码版本控制存储库(如Gitee,Github)
四个工作区关系如下图
操作流程
- 在工作目录中添加、修改文件:
- 将需要进行版本管理的文件放入暂存区域;
- 将暂存区域的文件提交到gt仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
如图
Git文件状态与关系
文件状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,
不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过 git add
状态变为 Staged . - Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文
件有两种去处, 如果它被修改, 而变为 Modified . 如果使用 git rm 移出版本库, 则成为
Untracked 文件 - Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过 git
add 可进入暂存 staged 状态, 使用 git checkout 则丢弃修改过, 返回到 unmodify 状态,
这个 git checkout 即从库中取出文件, 覆盖当前修改 ! - Staged: 暂存状态. 执行 git commit 则将修改同步到库中, 这时库中的文件和本地文件又变为一
致, 文件为 Unmodify 状态. 执行 git reset HEAD filename 取消暂存, 文件状态为
Modified
如何查看文件状态
git status #查看所有文件状态
git status [fliename] #查看指定文件状态
转换关系
如图
Git项目搭建与常用命令
项目搭建
本地仓库搭建
-
创建全新的仓库:在该仓库的本地目录下进入Git Bash终端输入以下命令
git init
此时会出现一个.git的隐藏文件,该文件就记录了所有的版本信息
-
远程目录克隆一个目录:即该仓库的本地目录下进入Git Bash终端输入以下命令
git clone [远程目录url]
此时该目录下就会出现与远程目录一样的目录
远程版本存储库的搭建
Gitee搭建
- 注册登录码云,完善个人信息
- 设置本机绑定SSH公钥,实现免密码登录!
# 进入 C:\Users\Administrator\.ssh 目录
# 生成公钥
ssh-keygen -t rsa
- 将公钥信息public key 添加到码云账户中即可!
- 使用码云创建一个自己的仓库
Github搭建
Git常用命令
git add #添加工作区文件到暂存区
git commit #将暂存区文件上传的本地版本库
git push #将本地版本库文件上传到远程版本库
git pull #从远程版本库下载文件到工作区
git fetch/clone #从远程版本库下载文件到本地版本库
git checkout #从本地版库将文件移动到工作区
git rm #将文件移出本地版本库
git reset HEAD [filename] #指定退回某一次提交的版本
如何忽略不想上传的文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号
([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不
忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件
(默认文件或目录都忽略)。
#为注释
*.txt #忽略所有 .txt结尾的文件
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt