一、 版本控制工具
什么是版本控制系統?
版本控制系統(Version Control System):是一種記錄一個或若干檔案內容變化,以便將來查閱特定版
本修訂情況的系統,版本控制系統不僅可以應用于軟體源代碼的文本檔案,而且可以對任何型別的檔案
進行版本控制,
常見的版本控制系統有:cvs、svn、git
為什么要有版本控制系統?
-
在開發程序中,經常需要對一個檔案進行修改甚至洗掉,但是我們又希望能夠保存這個檔案的歷史
記錄,如果通過備份,那么管理起來會非常的復雜, -
在多人開發時,如果需要多人合作開發一個頁面,那么修改以及合并也會非常的棘手,容易出現沖
突,
版本控制系統分類
關于版本控制說明
本地版本控制系統
本地版本控制系統就是在一臺機器上,記錄版本的不同變化,保證內容不會丟失
缺點:如果多人開發,每個人都在不同的系統和電腦上開發,沒辦法協同作業,

集中式版本控制系統
svn/cvs都是集中式的版本控制系統
-
需要一個中央服務器來管理代碼的的版本和備份
-
所有的用戶電腦都是從中央服務器獲取代碼或者是將本地的代碼提交到中央服務器
-
依賴與網路環境,如果連不上中央服務器,就無法提交和獲取代碼,
-
如果中央服務器宕機,所有人都無法作業,

分布式版本控制系統
git是分布式的版本控制系統,
-
需要一臺服務器作為代碼倉庫
-
每個用戶電腦都是一個服務器(代碼倉庫),并且和代碼倉庫是鏡像的,用戶修改和獲取代碼都是提交到自己的服務器當中,
-
不需要網路就可以進行作業,
-
當連接網路時,用戶可以選擇將自己的服務器與代碼倉庫進行同步

二、 git
git介紹
Git是一款免費、開源的分布式版本控制系統 ,用于敏捷高效地處理任何或小或大的專案,
Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放原始碼的版本控制軟體,
git安裝
Git下載地址:https://git-scm.com/download/win
推薦使用國內鏡像下載http://npm.taobao.org/mirrors/git-for-windows
-
不要安裝在中文目錄
-
不要使用桌面管理軟體
安裝很簡單,一直下一步即可,在任意的目錄下右鍵,能夠出現下圖,表示安裝成功了,

git用法方式主要有兩種,
-
git gui,即圖形化界面的方式
-
git bash,命令列的方式
bash是linux系統的命令,因此學習git前,我們先學習一下bash
-
在任意檔案夾中,都可以使用右鍵,通過git bash here打開命令列視窗,此時的路徑就是當前目錄,
-
視窗上右鍵,通過options-->Text-->select可以調整字體的大小,
# cd 改變目錄 (change directory)
cd images #進入images檔案夾
cd .. #進入上一層目錄
cd ~ #進入用戶根目錄
# tab 自動補全,當我們輸命令或者目錄很長時,可以使用tab鍵進行自動補全,
# 按兩次tab,會把所有符合要求的內容都列出來,
# pwd 列印當前目錄的路徑 (print work directory)
# ls 展示當前目錄串列(list)
ls # 展示當前目錄
ls -a # 展示全部內容,包括隱藏檔案
ls -l # 以串列的形式展示內容
ls -al # 以串列的形式展示所有的內容,包括隱藏檔案,
ls --help # 查看ls所有的引數,
ls -l images # 展示images目錄下的檔案,如果沒有寫目錄,默認展示當前目錄,
# clear reset清屏
clear # 清除螢屏內容,滾動條,保留了歷史
reset # 重置,歷史記錄沒了,
# mkdir 創建一個檔案夾 (make directory)
mkdir css # 創建一個css的檔案夾
mkdir css img js # 創建了三個檔案夾
# rmdir 洗掉一個空的檔案夾
# 洗掉檔案夾
# touch 創建檔案 touch index.html
# 創建了一個index.html檔案 touch css/index.css
# 在css目錄下創建idnex.css檔案
# rm 洗掉一個檔案獲取檔案夾 rm index.html
# 洗掉index.html檔案 rm js
# 洗掉空的js檔案夾 rm -r css
# 遞回洗掉一個檔案夾
# mv 移動檔案(move) mv index.html js
# 將html檔案移動到js檔案夾中 mv index.html index2.html
# 將index.html重命名為index2.html
# cp 復制檔案(cp) cp index.html index2.html
# 復制index.html檔案,命名為index2.html cp -r css css02
# 如果復制的是檔案夾,需要使用-r引數,
# cat 查看檔案全部內容 cat index.html
# less 查看檔案部分內容 less index.html
# q退出查看
基本操作
-
初始化git倉庫
git init -
查看當前git倉庫的狀態
git status -
將檔案添加到git的暫存區
git add 檔案名 -
將檔案由暫存區提交到倉庫區
git commit -m '提交說明' -
查看提交日志
git log
# 初始化git倉庫,會在當前目錄生成一個隱藏檔案夾 .git 不要去修改這個檔案夾下的任意東西,
git init
# 查看git的狀態 ,如果此時新建一個檔案,那么這個檔案是沒有被追蹤的,說白了git還沒有管理這個新建 的檔案
git status
# 讓git管理這個新建的檔案
git add index.html
# 讓檔案由暫存區提交到倉庫區,此時檔案才真正的被git管理了,
# 如果提交日志亂碼,右鍵-->options-->Text-->將編碼改成utf-8
git commit -m '第一次提交'
# 查看提交日志
git log
配置郵箱和用戶名
如果第一次使用git,會要求設定用戶名和郵箱
# git config user.name 你的目標用戶名
# git config user.email 你的目標郵箱名
# 這種配置方式只有在當前倉庫生效
git config user.name shuaige
git config user.email [email protected]
# 可以使用--global引數,配置全域的用戶名和郵箱,這樣別的git倉庫就不需要重新配置了,
# 如果同時配置了區域的和全域的,那么區域的用戶名和郵箱將會生效,
git config --global user.name shuaige
git config --global user.email [email protected]
# 查看配置資訊
git config --list
git的作業原理

git命令詳解
git add
作用:將檔案由 作業區 添加到 暫存區,暫存檔案
用法:git add 檔案名
git add --all 或者 git add -A 或者 git add . (簡寫) 添加所有檔案
git add a.txt b.txt 同時添加兩個檔案
git add *.js 添加當前目錄下的所有js檔案
git checkout 檔案名
作用:暫存區的內容恢復到作業區,
git checkout 1.txt 將暫存區中1.txt檔案恢復到作業區
git commit
作用:將檔案由 暫存區 添加到 倉庫區
git commit -m "提交說明"
git status
作用:查看檔案的狀態
命令: git status
命令: git stauts -s 簡化日志輸出格式
git log
作用:查看提交日志
git log 只能查看當前head以及以前的日志
git log --oneline 簡潔的日志資訊
git reflog 查看所有的提交變更日志
git reset
作用:版本回退,將代碼恢復到已經提交的某一個版本中,
git reset --hard 版本號 將代碼回退到某個指定的版本(版本號只要有前幾位即可)
git reset --hard head~1 將版本回退到上一次提交
-
~1:上一次提交
-
~2:上上次提交
-
~0:當前提交
git忽視檔案
在倉庫中,有些檔案是不想被git管理的,比如資料的配置密碼、寫代碼的一些思路等,git可以通過配置從而達到忽視掉一些檔案,這樣這些檔案就可以不用提交了,
在倉庫的根目錄創建一個 .gitignore 的檔案,檔案名是固定的,
將不需要被git管理的檔案路徑添加到 .gitignore 中
# 忽視idea.txt檔案
idea.txt
# 忽視.gitignore檔案
.gitignore
# 忽視css下的index.js檔案
css/index.js
# 忽視css下的所有的js檔案
css/*.js
# 忽視css下的所有檔案
css/*.*
# 忽視css檔案夾
css
三、 git分支操作
分支就是科幻電影里面的平行宇宙,當你正在電腦前努力學習Git的時候,另一個你正在另一個平行宇宙里努力學習SVN,
如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響,不過,在某個時間點,兩個平行宇宙合并了,結果,你既學會了Git又學會了SVN!

為什么要有分支?
如果你要開發一個新的功能,需要2周時間,第一周你只能寫50%代碼,如果此時立即提交,代碼沒寫完,不完整的代碼會影響到別人無法作業,如果等代碼寫完再提交,代碼很容易丟失,風險很大,
有了分支,你就可以創建一個屬于自己的分支,別人看不到,也不影響別人,你在自己的分支上作業,提交到自己的分支上,等到功能開發完畢,一次性的合并到原來的分支,這樣既安全,又不影響他人作業,
在作業程序中,經常會碰到多任務并行開發 的情況,使用分支就能很好的避免任務之間的影響,其他版本工具比如svn,cvs中也有分支這個概念,但是這些工具中的分支操作非常的慢,形同擺設,
分支操作的命令
創建分支
git branch 分支名稱 創建分支,分支中的代碼,在創建時與當前分支的內容完全相同,
git在第一次提交時,就有了一個叫master的主分支,
查看分支
git branch 可以查看所有的分支,
在當前分支的前面會有一個 *
切換分支
git checkout 分支名稱 切換分支
在當前分支的任何操作,都不會影響到其他的分支,除非進行了分支合并,
切換分支之前,必須保證代碼已經提交了
創建并切換分支
git checkout -b 分支名稱 創建并切換分支
洗掉分支
git branch -d 分支名稱 可以洗掉分支
注意:不能在當前分支洗掉當前分支,需要切換到其他分支才能洗掉,
注意: master 分支是可以洗掉的,但是不推薦那么做,
合并分支
git merge 分支名稱 將其他分支的內容合并到當前分支,
在 master 分支中執行git merge dev 將 dev分支中的代碼合并到 master 分支
git分支的作業原理

git合并沖突
對于同一個檔案,如果有多個分支需要合并時,容易出現沖突,
合并分支時,如果出現沖突,只能手動處理,再次提交,一般的作法,把自己的代碼放到沖突代碼的后面即可
四、遠程倉庫
所有的程式員都可以通過遠程倉庫來進行版本的共享,達到所有人的代碼一致的效果,
遠程倉庫相關的命令
git push
作用:將本地代碼提交到遠程倉庫
git push 倉庫地址 master 在代碼提交到遠程倉庫,注意master分支必須寫,不能省略
例子: git push [email protected]:hucongcong/test.git master 如果第一次使用,需要填寫github的用戶名和密碼
git pull
作用:將遠程的代碼下載到本地
git pull 代碼地址 將遠程的代碼中master分支下載到本地
通常在push前,需要先pull一次,
git clone
作用:克隆遠程倉庫的代碼到本地
git clone 倉庫地址 自定義本地倉庫名 將整個倉庫克隆到本地
git remote
每次push和pull操作都需要帶上遠程倉庫的地址,非常的麻煩,我們可以給倉庫地址設定一個別名
git remote add 倉庫別名 倉庫地址
使用倉庫別名替代倉庫地址,倉庫別名相當于一個變數,倉庫地址就是對應的值,
git remote add hucc [email protected]:hucongcong/test.git 設定了一個hucc的倉庫別名,以后push和pull都可以不用倉庫地址,而用hucc
git remote remove hucc 洗掉hucc這個倉庫別名,
git remote 查看所有的倉庫別名
如果使用了git clone命令從遠程倉庫獲取下來的,那么這個本地倉庫會自動添加一個 origin的遠程地址,指向的就是克隆的遠程地址,
github
git與github沒有直接的關系,
-
git是一個版本控制工具,
-
github是一個代碼托管平臺,是git的一個遠程代碼倉庫,
-
將來作業時,公司會有自己的代碼倉庫,
github官網:https://github.com/
gitee碼云官網:https://gitee.com/
-
gitHub是一個面向開源及私有軟體專案的托管平臺,因為只支持git 作為唯一的版本庫格式進行托管, 故名gitHub,
-
github免費,代碼所有人都能看到,但是只有你自己能修改,付費的可以隱藏,
在github上創建一個專案,獲取到倉庫的地址,然后就可以將本地的代碼推送到遠程的服務器上,
SSH免密碼登陸
(對稱加密與非對稱加密)
每次push代碼,都需要輸入用戶名跟密碼,非常的麻煩,因此我們可以配置一個SSH免密碼登陸,
-
github為了賬戶的安全,需要對每一次push請求都要驗證用戶的身份,只有合法的用戶才可以push
-
使用ssh可以實作免密碼操作(不需要使用密碼)
SSH免密碼登錄配置
-
創建SSH Key:
ssh-keygen -t rsa -
在檔案路徑
C:\用戶\當前用戶名\找到.ssh檔案夾 -
檔案夾中有兩個檔案:
-
私鑰:
id_rsa -
公鑰:
id_rsa.pub
-
-
在
github -> settings -> SSH and GPG keys頁面中,新創建SSH key -
粘貼 公鑰
id_rsa.pub內容到對應文本框中 -
在github中新建倉庫或者使用現在倉庫,拿到
[email protected]:用戶名/倉庫名.git -
此后,再次SSH方式與github“通信”,不用輸入密碼確認身份了
使用github pages搭建博客
GitHub Pages 本用于介紹托管在 GitHub 的專案, 不過,由于他的空間免費穩定,用來做搭建一個博客再好不過了,
缺點:只能放靜態頁面,也就說github pages只能決議html、css、js,無法決議后端語言,
[用戶名.github.io] 將來訪問路徑
博客搭建步驟:
-
在本地作業目錄使用git初始化 git init
-
創建自己的博客專案
-
將創建好的博客添加到暫存區 git add [檔案路徑]
-
本地提交: git commit -m "第一個博客"
-
在github上創建一個專案,專案名 用戶名.github.io 固定的
-
提交到github: git push github倉庫地址 master
-
查看github中對應的倉庫中,是不是提交到了
-
訪問:用戶名.github.io
hexo創建博客
npm,node這些命令是在windows環境下運行的,需要在cmd中敲
安裝步驟
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
- 安裝hexo
npm install -g hexo
hexo -v # 查看hexo的版本資訊
- 初始化博客
# 新建一個目錄 blog
hexo init # 初始化
- 生成靜態頁面
hexo generate # 生成靜態頁面
hexo g # 生成靜態頁面(簡寫)
- 啟動服務
hexo server # 啟動服務
hexo s # 簡寫
- 訪問站點
http://localhost:4000/ # 通過這個地址就可以訪問了
hexo常見命令
]hexo中文檔案:https://hexo.io/zh-cn/docs/](https://hexo.io/zh-cn/docs/)
博客格式:
---
title: 我的第一篇博客//(注意冒號后面有一個空格不能丟,)
date: 2017-10-28 01:12:29 //指定博客的日期
tags:
- 學習
- 隨筆
- 心情
categories:
- javascript
---
# 我是大標題
這后面的內容就跟普通的markdown檔案沒什么區別
發布配置
安裝hexo的部署工具 npm install hexo-deployer-git --save
修改_config.yml檔案
# Site
title: 網站標題
subtitle: 子標題
description: 無
author: HUCC
language: zh-CN
timezone:
# 發布配置
deploy:
type: git
repo: github倉庫地址
branch: master
使用 hexo d 發布博客
五、idea集成git
idea配置git

idea上傳專案到本地倉庫


選中指定專案右鍵,選擇Git將專案添加到版本控制,然后使用Commit Directory提交專案到本地倉庫,



將本地倉庫專案推送到遠程倉庫



注意:如果沒有配置ssh公鑰,第一次本地推送,需要輸入GitHub或gitee遠程倉庫用戶名密碼,
idea設定git忽略部分檔案
安裝.ignore插件
點擊File->Settings ,找到Plugins搜索ignore,然后install,OK重啟idea

創建專案,在專案中添加.gitignore檔案



建議.gitignore檔案內容
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out
gen
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
!*/build/*.java
!*/build/*.html
!*/build/*.xml
# .gitignore檔案內容撰寫規則
*.a # 忽略所有 .a 結尾的檔案
!lib.a # 但 lib.a 除外
/TODO # 僅僅忽略專案根目錄下的 TODO 檔案,不包括 subdir/TODO
build/ # 忽略 build/ 目錄下的所有檔案
doc/*.txt # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
創建本地倉庫
$ git init
創建個人分支
$ git checkout -b dev
添加檔案到版本控制,提交到本地倉庫
$ git add .
$ git commit -m "first commit"
推送到遠程倉庫
$ git push https://gitee.com/liyunyi/ssm.g
合并分支推送到主分支
$ git checkout master
$ git merge dev
$ git push https://gitee.com/liyunyi/ssm.git master
克隆遠程倉庫專案到本地


附件:命令大全

Workspace:作業區
Index / Stage:暫存區
Repository:倉庫區(或本地倉庫)
Remote:遠程倉庫
倉庫
# 在當前目錄新建一個Git代碼庫
$ git init
# 新建一個目錄,將其初始化為Git代碼庫
$ git init [project-name]
# 下載一個專案和它的整個代碼歷史
$ git clone [url]
配置
# 顯示當前的Git配置
$ git config --list
# 編輯Git組態檔
$ git config -e [--global]
# 設定提交代碼時的用戶資訊
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
增加/洗掉檔案
# 添加指定檔案到暫存區
$ git add [file1] [file2] ...
# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]
# 添加當前目錄的所有檔案到暫存區
$ git add .
# 添加每個變化前,都會要求確認
# 對于同一個檔案的多處變化,可以實作分次提交
$ git add -p
# 洗掉作業區檔案,并且將這次洗掉放入暫存區
$ git rm [file1] [file2] ...
# 停止追蹤指定檔案,但該檔案會保留在作業區
$ git rm --cached [file]
# 改名檔案,并且將這個改名放入暫存區
$ git mv [file-original] [file-renamed]
代碼提交
# 提交暫存區到倉庫區
$ git commit -m [message]
# 提交暫存區的指定檔案到倉庫區
$ git commit [file1] [file2] ... -m [message]
# 提交作業區自上次commit之后的變化,直接到倉庫區
$ git commit -a
# 提交時顯示所有diff資訊
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代碼沒有任何新變化,則用來改寫上一次commit的提交資訊
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定檔案的新變化
$ git commit --amend [file1] [file2] ...
分支
# 列出所有本地分支
$ git branch
# 列出所有遠程分支
$ git branch -r
# 列出所有本地分支和遠程分支
$ git branch -a
# 新建一個分支,但依然停留在當前分支
$ git branch [branch-name]
# 新建一個分支,并切換到該分支
$ git checkout -b [branch]
# 新建一個分支,指向指定commit
$ git branch [branch] [commit]
# 新建一個分支,與指定的遠程分支建立追蹤關系
$ git branch --track [branch] [remote-branch]
# 切換到指定分支,并更新作業區
$ git checkout [branch-name]
# 切換到上一個分支
$ git checkout -
# 建立追蹤關系,在現有分支與指定的遠程分支之間
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到當前分支
$ git merge [branch]
# 選擇一個commit,合并進當前分支
$ git cherry-pick [commit]
# 洗掉分支
$ git branch -d [branch-name]
# 洗掉遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
標簽
# 列出所有tag
$ git tag
# 新建一個tag在當前commit
$ git tag [tag]
# 新建一個tag在指定commit
$ git tag [tag] [commit]
# 洗掉本地tag
$ git tag -d [tag]
# 洗掉遠程tag
$ git push origin :refs/tags/[tagName]
# 查看tag資訊
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一個分支,指向某個tag
$ git checkout -b [branch] [tag]
查看資訊
# 顯示有變更的檔案
$ git status
# 顯示當前分支的版本歷史
$ git log
# 顯示commit歷史,以及每次commit發生變更的檔案
$ git log --stat
# 搜索提交歷史,根據關鍵詞
$ git log -S [keyword]
# 顯示某個commit之后的所有變動,每個commit占據一行
$ git log [tag] HEAD --pretty=format:%s
# 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件
$ git log [tag] HEAD --grep feature
# 顯示某個檔案的版本歷史,包括檔案改名
$ git log --follow [file] $ git whatchanged [file]
# 顯示指定檔案相關的每一次diff
$ git log -p [file]
# 顯示過去5次提交
$ git log -5 --pretty --oneline
# 顯示所有提交過的用戶,按提交次數排序
$ git shortlog -sn
# 顯示指定檔案是什么人在什么時間修改過
$ git blame [file]
# 顯示暫存區和作業區的差異
$ git diff
# 顯示暫存區和上一個commit的差異
$ git diff --cached [file]
# 顯示作業區與當前分支最新commit之間的差異
$ git diff HEAD
# 顯示兩次提交之間的差異
$ git diff [first-branch]...[second-branch]
# 顯示今天你寫了多少行代碼
$ git diff --shortstat "@{0 day ago}"
# 顯示某次提交的元資料和內容變化
$ git show [commit]
# 顯示某次提交發生變化的檔案
$ git show --name-only [commit]
# 顯示某次提交時,某個檔案的內容
$ git show [commit]:[filename]
# 顯示當前分支的最近幾次提交
$ git reflog
遠程同步
# 下載遠程倉庫的所有變動
$ git fetch [remote]
# 顯示所有遠程倉庫
$ git remote -v
# 顯示某個遠程倉庫的資訊
$ git remote show [remote]
# 增加一個新的遠程倉庫,并命名
$ git remote add [shortname] [url]
# 取回遠程倉庫的變化,并與本地分支合并
$ git pull [remote] [branch]
# 上傳本地指定分支到遠程倉庫
$ git push [remote] [branch]
# 強行推送當前分支到遠程倉庫,即使有沖突
$ git push [remote] --force
# 推送所有分支到遠程倉庫
$ git push [remote] --all
撤銷
# 恢復暫存區的指定檔案到作業區
$ git checkout [file]
# 恢復某個commit的指定檔案到暫存區和作業區
$ git checkout [commit] [file]
# 恢復暫存區的所有檔案到作業區
$ git checkout .
# 重置暫存區的指定檔案,與上一次commit保持一致,但作業區不變
$ git reset [file]
# 重置暫存區與作業區,與上一次commit保持一致
$ git reset --hard
# 重置當前分支的指標為指定commit,同時重置暫存區,但作業區不變
$ git reset [commit]
# 重置當前分支的HEAD為指定commit,同時重置暫存區和作業區,與指定commit一致
$ git reset --hard [commit]
# 重置當前HEAD為指定commit,但保持暫存區和作業區不變
$ git reset --keep [commit]
# 新建一個commit,用來撤銷指定commit
# 后者的所有變化都將被前者抵消,并且應用到當前分支
$ git revert [commit] 暫時將未提交的變化移除,稍后再移入
$ git stash $ git stash pop
其他
# 生成一個可供發布的壓縮包
$ git archive
參考網址
git大全
https://gitee.com/all-about-git
深入淺出git教程
https://www.cnblogs.com/syp172654682/p/7689328.html
阮一峰git教程
https://www.liaoxuefeng.com/wiki/896043488029600
idea中.ignore忽略提交檔案到Git的使用
http://t.csdn.cn/seZMH
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/509824.html
標籤:其他
上一篇:Git、TortoiseGit中文安裝教程,如何注冊Gitee賬號進行代碼提交,上傳代碼后主頁貢獻度沒顯示綠點(詳解)
