Git
一、 前言
学习资料:git 官网
1.为什么要学习 Git
Git 是一个分布式版本控制系统。
二、Git 优点
- 完全分布式
- 能高效管理大型项目
- 非线性分支管理系统(Git 分支)
- 直接记录快照,而非差异比较
- 近乎所有的操作都是 本地执行
- Git 保证完整性(Git 的数据在存储前都要计算校验和)
- Git 一般只添加数据
2、初识 Git
1、已提交、已修改、已暂存
- 三种状态
- 已提交 commited : 数据已安全地保存在数据库中。
- 已修改 modified : 修改了文件,但还没保存到数据库中。
- 已暂存 staged : 对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
2、工作区、暂存区、git 目录
工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
流程
- 在工作区修改文件
- 将要提交的文件暂存(添加到暂存区)
- 将暂存区的文件提交(提交到 Git 目录/仓库)
三、Git 环境配置
1、安装
2、初次运行 Git 前的配置
1、git config
文件位置(三个地方,优先级由低往高依次是)
- /etc/gitconfig 修改这个文件时需要使用 git config --system (需要 root 权限)
- ~/.gitconfig 或者 ~/.config/git/config : 只对当前用户有效,修改时需要使用 git config --global (对系统上当前用户所有的仓库生效)
- 当前 git 目录的 config 文件 (.git/config) : 使用 git config --local 修改
# 查看所有的配置,以及所在的文件
git config --list --show-origin
# 设置用户信息
git config --global user.name "wangzhy"
git config --global user.email "iwangzhy@gmail.com"
# 指定文本编辑器
git config --global core.editor vim
# 查看所有的配置
git config --list
# 查看指定配置
git config user.name
# 查看帮助信息
git help config
git config -h
四、Git 基础
1、获取 Git 仓库
- 自己初始化一个 Git 仓库
git init
- 克隆一个 Git 仓库
git clone
会把服务器上的每一个文件的每一个版本都拉取下来
git clone https://github.com/iwangzhy/picgo
2、记录每次更新到仓库
工作目录下的文件只有两种状态
- 跟踪 tracked
- 未跟踪 untracked
1、检查当前文件状态
git status
2.跟踪新文件
git add filename
文件状态会变为 Staged (使用 git status
会显示在 Changes to be committed
下面)
3.暂存已修改的文件
如果修改了已经被跟踪的文件,使用 git status
命令,会显示在 Changes not staged fot commit
下面
4、git add
- 跟踪新文件
- 把已跟踪的文件添加到暂存区
- 合并时把有冲突的文件标记为已解决状态
5、git status -s
简化输出
- ?? :新添加的未跟踪的文件
- A :新添加到暂存区中的文件
- M :修改过的文件
左边暂存区,右边工作区
M 工作区文件已修改,但未暂存
MM 工作区文件已修改,且暂存后又做了修改
A 新添加暂存区的文件
M 文件被修改,且暂存
?? 未被跟踪的文件
6、.gitignore
文件
.gitignore
文件规范
- 所有空行或者以
#
开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(
/
)开头防止递归。 - 匹配模式可以以(
/
)结尾指定目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(
!
)取反。
* 匹配任意字符
[abc] abc 中的任意一个字符
? 匹配任意一个字符
[0-9]
** 匹配任意中间目录 例如 a/**/z 可以匹配 a/z、 a/b/z、 a/b/c/z
Java.gitignore
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*