---
title: Git(1)-初见
date: 2017-11-18 02:35:18
tags: 
  - git
  - 版本控制
categories: 
  - Git
---


Git是分布式版本控制系统，与SVN类似的集中化版本控制系统相比，集中化版本控制系统虽然能够令多个团队成员一起协作开发，但有时如果中央服务器宕机的话，谁也无法在宕机期间提交更新和协同开发。甚至有时，中央服务器磁盘故障，恰巧又没有做备份或备份没及时，那就可能有丢失数据的风险。
<!-- more -->
但Git是分布式的版本控制系统，客户端不只是提取最新版本的快照，而且将整个代码仓库镜像复制下来。如果任何协同工作用的服务器发生故障了，也可以用任何一个代码仓库来恢复。而且在协作服务器宕机期间，你也可以提交代码到本地仓库，当协作服务器正常工作后，你再将本地仓库同步到远程仓库。

#### Git的优势
+ 能够对文本版本控制和多人协作开发
+ 拥有强大的分支特性 , 所以能够灵活地以不同的工作流协同开发
+ 分布式版本控制系统 , 即使无网络的情况下也能提交代码到本地仓库 , 有网络时再同步到远程仓库
+ 当团队中某个成员完成某个功能时 , 通过pull request操作来通知其他团队成员 , 其他成员可以进行review code后再合并代码

#### Git的特性
+ 版本库当中的文件有3种状态 , 分别是`已提交(committed)` , `已修改(modified)` , `已暂存(staged)`
+ 直接记录快照 , 而非差异比较
+ 多数操作仅添加数据
+ 几乎所有的操作都是在本地执行
+ 时刻保持数据的完整性

### 准备工作
#### config
Git自带一个`git config`工具来帮主设置git的相关配置
```bash
#查看操作系统中所有用户的通用配置
git config --system --list

#查看当前用户的配置
git config --global --list
```
如果是当前仓库中 , 则在.git/config 中的配置是只针对该仓库的 , 每个级别的配置会覆盖上一个级别的配置
```bash
#可以单独查看某一项配置信息
#如果没有指定级别,则表示查看最终生效的配置信息
git config user.name

#或者指定某个级别的某个属性
git config --global user.name
```

##### 设置用户信息
```bash
git config --global user.name "NewName"
#如果不加global则表示只修改当前库当中的配置信息
```
#### .gitignore
每个库中都可以存在一个该文件
用来配置不需要git进行追踪的文件 , 比如日志 , 编译的临时文件等
内容规范如下
+ `#`开头表示注释
+ 可以使用标准的glob模式匹配
+ 匹配模式以`/`开头防止递归
+ 匹配模式以`/`结尾指定目录
+ 要忽略指定模式以外的文件或目录 , 可以在模式前加上`!`表示取反

glob模式是一种简化的正则表达式
+ `*` 匹配零个或多个任意字符
+ `[abc]` 只包含括号内的任意一个字符
+ `[0-9]` 横线表示范围
+ `?` 匹配任意一个字符
+ `**` 匹配任意的目录结构
