[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工作流

* 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常用命令行

**名詞解釋:** 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