[TOC]
## 前言
git版本管理作为开源项目的版本管理法则,以及多分支多版本的扁平分布式支持,被大多数的开发者所喜爱,那么究竟如何才能正确而轻松的学习git的版本管理呢?目前公司内部是搭建的gitlab的平台,那么我们学习gitlab的工作流是必须的哦。
## 准备工作
### git特点
* 重点讲与svn的差别,弱化权限,对外公开,作为项目公开平台以及研发项目特别好。另外支持好的项目结构以及源码展示,提供了好的注释支持,打包机制。
* 提供分支管理,主分支概念,对于修复bug以及项目中的分支项目有好的支持,而不会影响主项目代码。
* 整体共享一个版本库,只能作为整体提交或者更新。
###gitlab/github
* github:开源项目代码托管仓库平台,可以支持代码托管,开发人员沟通,开发者文档,搭建虚拟团队,写个人文档,构建多分支项目。
* gitlab:企业代码托管仓库
### 准备一个git源项目
* [github官网地址](https://github.com) ,也可以选择公司内网的[gitlab](http://192.168.0.116/users/sign_in)新建项目,
* [新建代码仓库教程](https://guides.github.com/activities/hello-world/)
### 准备一个git源项目
### 本地安装git客户端
* 软件下载地址:[内网地址(win64位)](\\192.168.0.117\share1\ZJFE\前端软件) ;[官网地址-win](https://git-scm.com/download/win)
* 安装教程:[点击查看](http://jingyan.baidu.com/article/49711c617f3e03fa451b7c10.html)
* 需要注意的是在进入Configuring the line ending conversions界面,选择换行格式,选择“Checkout as-is, commit Unix-style line endings”(按照检出格式检出,但是提交统一按照unix格式)。其他的都是默认选项点下一步即可。
* 任意位置,可以在鼠标右键菜单打开git bash,或者用git gui进行相关操作。例如 git --version 可以查看安装好的git版本。
除此之外,git bash面板还支持npm相关的命令操作,但不支持cmd的部分操作。cmd面板可支持git的相关操作,不同的只是前面没有$标志,不影响运行结果。
``` bash
$ git --version
```
## 图解git
* git的三个代码仓库
![git仓库概念](https://box.kancloud.cn/5d5c6f9a53880b497fe75b5ff6719a9e_354x250.png)
* 图解git工作流
![git工作流](https://box.kancloud.cn/fdaaee53804752ac4afb49b4b418fade_600x164.png)
* git常见的三种工作流程
1. git
2. github flow
3. gitlab flow
*了解更多:[git三种工作流的区别](http://www.ruanyifeng.com/blog/2015/12/git-workflow.html)
---
## git基本配置
### 查看配置
* 查看配置列表
``` bash
$ git config --list
```
### 修改配置
* 设置用户名,邮箱
``` bash
$ git config --global user.name "csnikey"
$ git config --global user.email "email address"
```
* 设置编码
``` bash
$ git config --global gui.encoding utf-8
$ git config --global i18n.commitencoding utf-8
$ git config --global i18n.logoutputencoding gbk
```
## git基本命令
* 图解git常用命令行
![git常用命令行](https://box.kancloud.cn/8067c397660ddf68048127602c5fc11d_1172x340.png)
**名词解释:** Workspace:工作区 ; Index / Stage:暂存区; Repository:仓库区(或本地仓库); Remote:远程仓库;
### 新建项目
* 当前目录作为项目目录
``` bash
$ git init
```
* 新建一个目录作为git目录
``` bash
$ git init proname
```
* 检出一个项目,默认将用远程项目的名字作为项目文件夹名称(如果检出目录已经有该文件,并且非空会报错哦),另外特别说明:默认情况下clone只能检出master分支,检出后可以利用git branch -r 查看远程分支,然后在checkout 对应的远程分支即可(检出时就是检出远程的分支)。
``` bash
$ git clone url
```
* 检出一个项目,用自定义的名字,会帮你新建文件夹
``` bash
$ git clone url self_proname
```
### 从远程更新代码
* 建议项目开发之前都拉取下远程代码
``` bash
$ git pull
```
### 提交代码到远程
* 检测本地代码的状态,命令行会给出正确的提交流程
``` bash
$ git status
```
* 提交代码到暂存区 (.代表 所有文件,也可以指定特定文件).
``` bash
$ git add .
```
* 如果遇到提交失败,提示Another git process seems to be running in this repository...,说明有其他进程操作这个文件,删除锁文件即可。然后就可以愉快的进行下一步了。
``` bash
$ rm -f ./.git/index.lock
```
* 提交代码到本地仓库 (message代表提交的注释,必须填写的)
``` bash
$ git commit -m [message]
```
* 提交之前从远程拉取项目,更新一下,避免提交失败。如果拉取失败,那么检出有问题的文件,进行处理。
``` bash
$ git pull
```
* 如果有冲突文件,针对冲突文件进行处理,文件内会有多行冲突描述的,建议使用较好的客户端工具,比如toriseGit
``` bash
$ git diff
```
* 修改完成之后,重复上面流程,再次pull,如果不报错了,就可以push了,默认提交到本分支
``` bash
$ git push
```
## 更多
* 清空命令面板
```
$ clear
```
###相关文档
* 廖雪峰git教程参考:[点击跳转](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/)
- 前端入门
- 前端入职须知
- 前端自我定位
- pc与手机页面差别
- 前端书单
- 前端种子计划
- 前端技术栈
- ps
- ps入门阶段
- html
- html入门
- html代码规范
- meta
- table
- iframe
- a标签详解
- image
- html代码审查工具
- h5专题
- h5入门
- h5新增属性
- canvas画布教程
- audio/video
- Geolocation
- Websockets
- Web storage
- Communication
- Web Workers
- requestAnimationFrame
- css
- css入门必学
- css代码规范
- 项目字体规范
- css基本位置布局
- css常见样式命名规则
- css代码优化建议
- css常用样式名
- css选择器攻略
- css盒子模型的理解
- css属性继承与默认值
- css代码审查工具
- css中常见的知识盲区
- css3新特性浅谈
- css新特性了解
- border-radius
- background
- transform
- animation
- white-space
- css常用技术
- 文本两端对齐
- css之浮动解决方案
- css优化建议
- 文本超出省略
- img-sprites
- rem布局教程
- 水平居中&垂直居中
- 固宽&变宽布局
- 宽高固定比例的盒模型
- 样式预处理语言
- less教程
- sass教程
- postcss教程
- js
- javascript入门
- js代码规范
- js基础拓展
- js代码审查工具
- js性能优化
- js基本语句
- 基本运算
- 基本语句语法
- js对象
- es6入门
- obj
- Array
- Date
- String
- Boolean
- Number
- Json
- RegExp
- Math
- function
- jquery入门
- jq核心思想
- jq基本语法
- jq插件库汇总
- js常用技术
- break&continue区别
- js对日期转换
- js控制运动-move.js
- 原生js-cookie语法
- ajax请求后回调
- 表单数据序列化
- zepto
- zepto入门
- 百度touchjs
- js编程
- 插件库
- 功能性插件
- pdfjs
- wdatepicker
- qrcoder
- barcode插件
- photoviewer
- hammer.js
- echarts
- 交互组件
- layerjs
- java
- java入门
- java基本语句
- springMVC
- javaweb
- vm模板引擎
- freemarker
- maven教程
- mySql教程
- flex教程
- flex入门
- git教程
- git入门
- git分支
- git-tag管理
- git注意事项
- git-torise入门
- ide-git插件使用
- web
- web兼容
- web兼容思想
- pc端兼容适配文档
- pc端兼容bug汇总
- ie兼容bug汇总
- 手机兼容bug汇总
- web安全
- jeecms
- web存储
- app/h5组件
- 安卓教程
- ios教程
- 前端教程
- rubikx的教程
- 其他
- artTemplate
- tmod使用
- 跨域问题
- markdown教程
- 常用工具
- postman-api调试
- web常识
- 浏览器ua统计
- ui框架
- easyui
- bootstrap
- 入门推荐
- weui
- sui-pc
- sui-mobile
- layerUi