複習寶典之Git分佈式版本控制

查看更多寶典,請點擊《金三銀四,你的專屬面試寶典》html

第三章:Git分佈式版本控制

1)git文件狀態

git中的文件有如下幾種狀態:git

未跟蹤(untrack):表示文件爲新增長的。github

已修改(modified):表示修改了文件,但還沒保存到git倉庫中。web

已暫存(staged):表示對一個已修改文件的當前版本作了標記,使之包含在下次提交的快照中。 面試

已提交(committed):表示文件已保存在git倉庫中。正則表達式

 

2)git工做區域

按照本地計算機與遠程計算機劃分,工做區域有如下幾種:算法

本地計算機:shell

Working Directory(工做目錄):即正在編輯的文件狀態。文件狀態爲未跟蹤(untrack)和已修改(modified)在此區域內。數據庫

Staging Area(暫存區):保存了下次將提交的文件列表信息。文件狀態爲已暫存(staged)在此區域內。緩存

Repository(本地倉庫):提交到本地倉庫的文件。

遠程計算機:

Repository(遠程倉庫):已提交到遠程計算機內的文件。

 

3)git經常使用命令

git clone :將遠程倉庫clone到本地計算機。

git pull :拉取遠程倉庫的數據。

git status :展現工做區及暫存區域中不一樣狀態的文件。

git add :將內容從工做目錄添加到暫存區。

git commit :全部經過 git add 暫存的文件提交到本地倉庫。

git push :將本地倉庫的記錄提交到遠程倉庫。

git reset HEAD <file> :從暫存區移除指定文件。

git checkout -- <file> :從本地倉庫恢復指定文件。

git mv:重命名文件

git log:查看提交歷史

 

4)git配置級別

config 配置有system級別(系統級別), global(用戶級別) 和local(當前倉庫),三個設置先從system-》global-》local ,底層配置會覆蓋頂層配置。

查看系統config

`git config --system --list`

查看當前用戶(global)配置

`git config --global  --list`

查看當前倉庫配置信息

`git config --``local`  `--list`

因而可知--global中存儲了提交用戶的email和用戶名,若是須要手動設置則可使用以下指令:

`git config --global user.name ``"myname"``git config --global user.email  ``"test@gmail.com"`

 

5)git工做方式

Git 和其餘版本控制系統的主要差異在於,Git 只關心文件數據的總體是否發生變化,而大多數其餘系統則只關心文件內容的具體差別。這類系統(CVS,Subversion,Perforce,Bazaar 等等)每次記錄有哪些文件做了更新,以及都更新了哪些行的什麼內容:

 

 

Git 並不保存這些先後變化的差別數據。實際上,Git 更像是把變化的文件做快照後,記錄在一個微型的文件系統中。每次提交更新時,它會縱覽一遍全部文件的指紋信息並對文件做一快照,而後保存一個指向此次快照的索引。爲提升性能,若文件沒有變化,Git 不會再次保存,而只對上次保存的快照做一連接。Git 的工做方式就像下圖所示:

 

 

6)git安裝後的配置

Git安裝以後須要進行一些基本信息設置

  a、設置用戶名:git config -- global user.name '你再github上註冊的用戶名';

  b、設置用戶郵箱:git config -- global user.email '註冊時候的郵箱';

注意:該配置會在github主頁上顯示誰提交了該文件

  c、配置ok以後,咱們用以下命令來看看是否配置成功

  git config --list

注意:git config --global 參數,有了這個參數表示你這臺機器上全部的git倉庫都會使用這個配置,固然你也能夠對某個倉庫指定不一樣的用戶名和郵箱

 

7)git上傳基本流程

7.1 建立git倉庫

在要上傳的項目文件夾右擊選擇Git Bash Here->輸入$ git init

7.2 向倉庫中添加文件 

經過$ git add '文件名'添加到暫存區

$ git status查看目前狀態

7.3 提交到本地倉庫 

$ git commit -m '這裏寫提交說明'

7.4 修改文件與刪除文件

直接修改或直接刪除

命令:

修改:$ vi '文件名',修改以後執行添加與提交

刪除:$ git rm '文件名',刪除後直接提交

7.5 Git克隆操做與提交到遠程

克隆操做:$ git clone 倉庫地址

提交到遠程:先添加到暫存區》》提交到本地倉庫》》git push提交到遠程倉庫

若是提交出錯,可能由 .git 文件夾中的文件被設爲「只讀」所致,將 .git 文件夾下的全部文件、文件夾及其子文件的只讀屬性去掉便可。

注意用戶名與密碼要與遠程倉庫一致:

將遠程鏈接地址改成:https://用戶名:密碼@github.com/用戶名/倉庫名.git

 

8)一些相關概念

sha-1散列:SHA (Secure Hash Algorithm,譯做(安全散列算法) 是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院(NIST) 發佈的一系列密碼散列函數。正式名稱爲 SHA 的家族第一個成員發佈於 1993年。然而人們給它取了一個非正式的名稱 SHA-0 以免與它的後繼者混淆。兩年以後, SHA-1,第一個 SHA 的後繼者發佈了。 另外還有四種變體,曾經發布以提高輸出的範圍和變動一些細微設計: SHA-224, SHA-256, SHA-384 和 SHA-512 (這些有時候也被稱作 SHA-2)。

 

快照:快照技術主要是在操做系統以及存儲技術上實現的一種記錄某一時間系統狀態的技術。近來,Oracle等數據庫廠家以及Vmware等虛擬化產品也把這種技術引入各自的數據保護當中。存儲中使用快照技術因爲其普遍的實用性成爲應用最普遍的。

SINA對於快照的定義是:關於指定數據集合的一個徹底可用拷貝,該拷貝包括相應數據在某個時間點(拷貝開始的時間點)的映像。快照能夠是其所表示的數據的一個副本,也能夠是數據的一個複製品。

爲何使用快照?

瞬時備份:在不產生備份窗口的狀況下,能夠幫助客戶建立一致性的磁盤快照,每一個磁盤快照均可以認爲是一次對數據的全備份。從而實現常規備份軟件沒法實現的分鐘級別的RPO。

快速恢復:用戶能夠依據存儲管理員的定製,定時自動建立快照,經過磁盤差別回退,快速回滾到指定的時間點上來。經過這種回滾在很短的時間內能夠完成。大大的提升了業務系統RTO的水平。

應用測試:用戶可使用快照產生的虛擬硬盤的數據對新的應用或者新的操做系統版本進行測試,這樣能夠避免對生產數據形成損害,也不會影響到目前正在運行的應用。

報表打印等資源消耗較大的業務的分離:用戶能夠將指定時間點的快照虛擬硬盤分配給一個新的服務器,從而實現將報表打印等對於服務器核心業務會產生較大影響的剝離。使核心業務服務器運行更加平穩有效快速的運行。

下降數據備份對於系統性能的影響: 一般數據備份是在業務服務器上完成的。每次發起數據備份必然對當前業務系統運行性能形成影響。經過快照虛擬硬盤的提取後,備份工做能夠轉移到其餘服務器上。從而實現了零備份窗口(針對應用主機),零影響的理想數據備份。

 

傳輸協議:傳輸協議中各層都爲上一層提供業務功能。爲了提供這種業務功能,下一層將上一層中的數據併入到本層的數據域中,而後經過加入報頭或報尾來實現該層業務功能,該過程叫作數據封裝。用戶的數據要通過一次次包裝,最後轉化成能夠在網絡上傳輸的信號,發送到網絡上。當到達目標計算機後,再執行相反的拆包過程。

HTTPS和HTTP的區別: https協議須要到ca申請證書,通常免費證書不多,須要交費。 http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議。 http和https使用的是徹底不一樣的鏈接方式用的端口也不同,前者是80,後者是443。 http的鏈接很簡單,是無狀態的。 HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議 要比http協議安全。

SSH傳輸協議:SSH 爲 Secure Shell 的縮寫,由 IETF 的網絡工做小組(Network Working Group)所制定;SSH 爲創建在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用 SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題。SSH最初是UNIX系統上的一個程序,後來又迅速擴展到其餘操做平臺。SSH在正確使用時可彌補網絡中的漏洞。SSH客戶端適用於多種平臺。幾乎全部UNIX平臺-包括HP-UX、LinuxAIXSolarisDigital UNIXIrix,以及其餘平臺,均可運行SSH。

 

9)git忽略文件(.gitignore)

.gitignore忽略規則的匹配語法 在 .gitignore 文件中,每一行的忽略規則的語法以下: 1)空格不匹配任意文件,可做爲分隔符,可用反斜槓轉義 2)以「#」開頭的行都會被 Git 忽略。即#開頭的文件標識註釋,可使用反斜槓進行轉義。 3)可使用標準的glob模式匹配。所謂的glob模式是指shell所使用的簡化了的正則表達式。 4)以斜槓"/"開頭表示目錄;"/"結束的模式只匹配文件夾以及在該文件夾路徑下的內容,可是不匹配該文件;"/"開始的模式匹配項目跟目錄;若是一個模式不包含斜槓,則它匹配相對於當前 .gitignore 文件路徑的內容,若是該模式不在 .gitignore 文件中,則相對於項目根目錄。 5)以星號"*"通配多個字符,即匹配多個任意字符;使用兩個星號"**" 表示匹配任意中間目錄,好比a/**/z能夠匹配 a/z, a/b/z 或 a/b/c/z等。 6)以問號"?"通配單個字符,即匹配一個任意字符; 7)以方括號"[]"包含單個字符的匹配列表,即匹配任何一個列在方括號中的字符。好比[abc]表示要麼匹配一個a,要麼匹配一個b,要麼匹配一個c;若是在方括號中使用短劃線分隔兩個字符,表示全部在這兩個字符範圍內的均可以匹配。好比[0-9]表示匹配全部0到9的數字,[a-z]表示匹配任意的小寫字母)。 8)以歎號"!"表示不忽略(跟蹤)匹配到的文件或目錄,即要忽略指定模式之外的文件或目錄,能夠在模式前加上驚歎號(!)取反。須要特別注意的是:若是文件的父目錄已經被前面的規則排除掉了,那麼對這個文件用"!"規則是不起做用的。也就是說"!"開頭的模式表示否認,該文件將會再次被包含,若是排除了該文件的父級目錄,則使用"!"也不會再次被包含。可使用反斜槓進行轉義。

須要謹記:git對於.ignore配置文件是按行從上到下進行規則匹配的,意味着若是前面的規則匹配的範圍更大,則後面的規則將不會生效;

 

10)git取消修改與回退

10.1 未使用 git add 緩存代碼時:

可使用 git checkout --filepathname (好比: git checkout --readme.md ,不要忘記中間的 「--」 ,不寫就成了檢出分支了!!)。放棄全部的文件修改可使用 git checkout . 命令。此命令用來放棄掉全部尚未加入到緩存區(就是 git add 命令)的修改:內容修改與整個文件刪除。可是此命令不會刪除掉剛新建的文件。由於剛新建的文件還沒已有加入到 git 的管理系統中。因此對於git是未知的。本身手動刪除就行了。

10.2 已經使用了 git add 緩存了代碼:

可使用 git reset HEAD filepathname (好比: git reset HEAD readme.md)來放棄指定文件的緩存,放棄因此的緩存可使用 git reset HEAD . 命令。

此命令用來清除 git 對於文件修改的緩存。至關於撤銷 git add 命令所在的工做。在使用本命令後,本地的修改並不會消失,而是回到了10.1所示的狀態。繼續用10.1中的操做,就能夠放棄本地的修改。

10.3 已經用 git commit 提交了代碼:

可使用 git reset --hard HEAD^ 來回退到上一次commit的狀態。此命令能夠用來回退到任意版本:git reset --hard commitid ,你可使用 git log 命令來查看git的提交歷史,第一行就是 commitid。

 

11)git建立分支與合併分支

在版本回退裏,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支。HEAD嚴格來講不是指向提交,而是指向master,master纔是指向提交的,因此,HEAD指向的就是當前分支。

查看分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

建立+切換分支:git checkout -b <name>

合併某分支到當前分支:git merge <name>

刪除分支:git branch -d <name>

 

12)git中的rebase

咱們在使用git pull命令的時候,可使用--rebase參數,即git pull --rebase,這裏表示把你的本地當前分支裏的每一個提交(commit)取消掉,而且把它們臨時保存爲補丁(patch)(這些補丁放到".git/rebase"目錄中),而後把本地當前分支更新爲最新的"origin"分支,最後把保存的這些補丁應用到本地當前分支上。

 

13)github

能夠經過命令 git remote show [remote-name] 查看某個遠程倉庫的詳細信息,好比要看所克隆的 origin倉庫,能夠運行:$ git remote show origin

 

Git中從遠程的分支獲取最新的版本到本地有這樣2個命令:

git fetch:至關因而從遠程獲取最新版本到本地,不會自動merge

git pull:至關因而從遠程獲取最新版本並merge到本地

 

GitLab和GitHub同樣屬於第三方基於Git開發的做品,免費且開源(https://github.com/gitlabhq/gitlabhq 基於MIT協議),與Github相似,能夠註冊用戶,任意提交你的代碼,添加SSHKey等等。不一樣的是,GitLab是能夠部署到本身的服務器上,數據庫等一切信息都掌握在本身手上,適合團隊內部協做開發,你總不可能把團隊內部的智慧總放在別人的服務器上吧?簡單來講可把GitLab看做我的版的GitHub。

 

Webhook就是用戶經過自定義回調函數的方式來改變Web應用的一種行爲,這些回調函數能夠由不是該Web應用官方的第三方用戶或者開發人員來維護,修改。經過Webhook,你能夠自定義一些行爲通知到指定的URL去。Webhook的「自定義回調函數」一般是由一些事件觸發的,好比推送代碼到代碼庫或者博客下新增一個評論,源站點會爲Webhook進行HTTP請求的URI配置。用戶經過配置,就可使一個網站上的事件調用在另外一個網站上表現出來,這些事件調用能夠是任何事件,但一般應用的是系統集成和消息通知。

Webhook是一個API概念,而且變得愈來愈流行。咱們能用事件描述的事物越多,webhook的做用範圍也就越大。Webhook做爲一個輕量的事件處理應用,正變得愈來愈有用。

準確的說webhook是一種web回調或者http的push API,是向APP或者其餘應用提供實時信息的一種方式。Webhook在數據產生時當即發送數據,也就是你能實時收到數據。這一種不一樣於典型的API,須要用了實時性須要足夠快的輪詢。這不管是對生產仍是對消費者都是高效的,惟一的缺點是初始創建困難。

Webhook有時也被稱爲反向API,由於他提供了API規則,你須要設計要使用的API。Webhook將向你的應用發起http請求,典型的是post請求,應用程序由請求驅動。

相關文章
相關標籤/搜索