## Git
### 什么是Git?
- Git是一款源代碼管理工具(版本控制工具)
- 我們寫的代碼需要使用Git進行管理。
1.0是穩定
2.0加了新功能
- 源代碼有必要管理起嗎?
- 有必要,因為人工的去處理不同的版本,做相應備份會很麻煩。
- svn,vss,vcs,tfs.....
-Git是linux之父當年為了維護linux---linus之前也是手動維護合並把文件發給Linus
- BitKeeper(收費)
- 有人想破解(不給提供免費使用)
- linus自己寫了一個版本管理的工具(Git)
### 分布式版本管理工具,集中式
- git屬於分布式
- svn集中式
### git安裝
### git初始化一個倉庫
- 其實就是創建了一個.git隱藏目錄
- 命令:` git init `;初始化 有一個.get 隱藏文件夾
+ 想在哪個目錄創建.git目錄,就是哪個目錄打開工具然后寫命令.
+ 一般是在項目的根目錄執行這個命令.
+ 查看文件 ls 或者 ls -a
### 配置信息
- 配置用戶名 : `git config user.name "testName"`
- 配置郵箱 : `git config user.email "test@sina.com"`
- 查看配置信息: `git config --list`
### 把代碼提交到倉庫中
- 1.先把代碼添加到暫存區(就相當於放到倉庫門口)
+ 命令:`git add 文件路徑`
+ 示例:`git add ./reademe.md`
+ 可以使用`git add .`這個命令,批量把當前目錄下所有修改過的文件添加到暫存區。
- 2.把暫存區的文件提交倉庫里
+ 命令: `git commit -m "注釋" `
+ 示例: `git commit -m "我們添加了一個新的功能"`
+ -m 表示指定一個字符串,作為提交的說明(相當於注釋);
- 合並add 與commit 命令
+ `git commit -a -m "這是使用合並添加與提交的操作"`;
+ 這里-a參數表明把所有修改后的文件一起添加到暫存區.(只是對修改后的文件有效,對於新添加的文件沒有作用)
### 查看工作區狀態
- 命令:`git status`
### 添加忽略文件
- 在項目中有一些文件是不需要提交的,我們需要把它忽略掉
- 需要在.git文件夾所在目錄新建一個名為.gitignore的文件
然后在這個文件中寫上需要被忽略的文件的路徑。
示例: /css/a.css
: /css/*.css
: /a.html
### 比對文件差異
- 命令: `git diff`
+ 用來比較工作區內容與最近一次提交的內容的區別
+ 如果暫存區沒有文件,就會將工作與代碼與最近一次提交對比
- 命令:`git diff --cached` 比較暫存區的文件和倉庫中文件的區別
- 對比之前某兩次提交的文件的差異
+ 命令:`git diff [版本號1] [版本號2] [想比較的文件路徑]`
### 查看日志
- 命令:`git log`,可以查看每一次提交的日志
- 命令:`git log --oneline` 表示使用簡潔的形式輸出提交日志
### 版本回退
- 命令:`git reset --hard Head~1`
+ 這是將代碼回退到上上一次提交時的狀態
- 命令:`git reset --hard Head~2`
+ 回退到上上上次
- 命令:`git reset --hard Head~0`
+ 回退到上次提交時的狀態,~0可以省略
- 命令:`git reset --hard 版本號`
+ 通過每次提交時生成的版本號來回退版本
- 通過`git reflog`命令可以查看之前所有版本切換的操作記錄,可以通過這個命令得到的版本號回退到指定的版本。
### 創建分支
- 命令:`git branch [分支名]`
+ 創建一個新分支 分支名一般是 自己姓名的拼音或首字母+需求號
- 命令:`git branch`
+ 查看當前所有的分支
### 切換分支
- 命令:`git checkout [分支名]`
+ 切換分支后可以在切換后的分支中進行正常的操作
創建和切換合在一起操作:'git checkout -b [分支名]'
### 合並分支
- 命令:`git merge [分支名]`
+ 合並分支前先切換到主分支 master 然后在合並
+ git會將指定的分支合並到當前分支.
### 刪除分支
- 命令:`git branch -d [分支名]`
+ 刪除指定分支,-d參數表示要執行刪除操作
### git提交中的沖突
- 如果git不能自動合並分支,就會有沖突,我們需要手動解決沖突,然后再次提交
- 同一個文件的同一行在兩個分支中不一樣
## github
### github與git
- git 版本管理工具
- github 就是一個網站,只是這個網站提供git服務器的功能
### 上傳代碼到git服務器(push)
- 命令:`git push [遠程服務器地址] [遠程服務器的分支]`
+ 示例:`git push https://github.com/xxxxxxx.git master`
- 上傳時可以使用一些簡化的命令
+ 將遠程服務器地址寫成變量的形式
* `git remote add [變量名] [遠程服務器地址]`
* 示例:`git remote add origin https://github.com/xxxxxxxxx.git`
* 這樣之后就可以直接使用origin來代替git push 后面寫的地址了
`git push origin master`
- 還可以盡一步簡化
+ 在push時加上-u參數,就會默認建立本地當前分支與遠程指定分支的關聯,下一次push時就不需要輸入分支名了`git push origin`;
## git使用ssh方式上傳代碼與github
- git生成公鑰和私鑰
+ 命令:`ssh-keygen -t rsa`生成的公鑰與私鑰文件會在當用戶目錄的.ssh目錄下.
### 把代碼push到服務器時需要先pull一下
- 在pull之后如果遠程的代碼與本地的代碼有沖突,git會先自動合並沖突,如果不能自動合並,就必需我們手動去處理沖突。
### 從服務器上pull代碼到本地
- 如果本地沒有.git目錄,需要先初始化一下。
- 命令:`git pull [遠程服務器地址] [遠程的分支]`
### gh-pages分支-搭建博客.
- 需要把自已博客的網頁代碼上傳到github上的gh-pages分支
- 然后就直接訪問了
+ 訪問的url形式: [github用戶名].github.io/[倉庫的名字]/[具體的頁面]
### sourceTree , tortoiseGit
http://t.cn/R6tx5jJ
### npm
- 官網[https://www.npmjs.com]
- node package manager
- 命令:
+ 初始化:`npm init`
+ 安裝指定包:`npm install jquery --save`
+ 刪除指定包:`npm remove jquery --save`
+ 下載安裝package.json中dependencies屬性對的文-件:`npm install --production`
### browser-sync
- 更改代碼之后自動刷新瀏覽器
- 需要使用npm進行全局安裝:`npm install browser-sync -g`,-g表示安裝到全局
- 使用:`browser-sync start --server --files "./index.html,app.css,./css/*.css,*.*" `
- --files參數指定要監視的文件,后面跟要監視的文件的文件路徑以逗號分隔。
## gulp
[官網](http://www.gulpjs.com)
[中文網](http://www.gulpjs.com.cn)
- 前端自動化構建工具
js壓縮,var x,xname,混淆
合並.
css壓縮
html壓壓縮
- grunt ,webpack...
### 核心就5個方法
- task,gulp中是一個個任務的形式來實現功能。
+ task('任務名',function(){
.....
});
- src
+ src('./*.js')
- dest('./minjs/')// 指定處理后的文件的輸出路徑.
- watch('./*.js',['任務名1','任務名2']);
- run('任務名');//執行指定的任務.
### gulp的安裝
- 使用npm 進行安裝
- `npm install gulp-cli -g`;
### gulp 使用
#### 使用時還需要在項目中通過npm非全局安裝gulp
- `npm install gulp --save-dev`
#### 還需要在當前項目根目錄添加一個gulpfile.js文件來寫具體的任務代碼.
### gulp的一些插件
- 也是使用npm安裝
- 對js代碼進行壓縮 gulp-uglify
- 對代碼進行合並 gulp-concat
- 對css進行壓縮 gulp-cssnano
- 對html進行壓縮 gulp-htmlmin