幾張圖就能輕鬆掌握Git常用命令和原理

Git介紹

本質上,Git是一套內容尋址(content-addressable)文件系統,而和我們直接接觸的Git界面,只不過是封裝在其之上的一個應用層。這個關係頗有點類似於計算機網絡中應用層和下屬層的關係。在Git中,那些和應用層相關的命令(也就是我們最常用的命令,如git commit、 git push等),我們稱之爲porcelain命令(瓷器之意,意爲成品、高級命令);而和底層相關的命令(幾乎不會在日常中使用,如git hash-object、git update-index等),則稱之爲plumbing命令(管道之意,是連接git應用界面和git底層實現的一個管道,類似於shell,底層命令)。要了解Git的底層原理,就需要了解Git是如何利用底層命令來實現高層命令的。在此之前,讓我們先來看一下Git的目錄結構,和各個文件在Git中的作用。

  • git與github關係
    git就是一個版本控制工具,github是項目託管平臺
  • git與svn區別
    git是分佈式的版本控制系統 svn是集中式的版本控制系統
  • 集中式
    版本都存放在中央服務器,工作的時候先從中央服務器獲取最新版本,然後寫代碼,寫完後再把代碼推送給中央服務器
  • 分佈式
    首先分佈式沒有中央服務器,每一臺電腦都是一個版本庫,每一個同事之間互相推送修改的內容,但有的同事可能不能互相訪問,怎麼辦呢?沒關係這時候其實會有一臺服務器器充當遠程倉庫,來進行信息的修改,這個服務器就是平時我們clone代碼的那臺服務器

Git基本概念

  • 版本
    廣義上講,文件的每一次修改都可以稱爲一個版本。版本管理系統正是用來管理和跟蹤文件的修改的。在版本管理系統中,每一次提交會形成一個版本記錄,這些記錄串接起來就是整個項目的演化歷史。

  • 版本庫
    版本庫,也叫版本倉庫、倉庫,英文名爲Repository,經常簡寫爲Repo,是Git用來進行版本管理的主要場所。

在Git中使用init或clone創建一個新的版本庫後,就會在當前目錄下生成一個.git目錄,這個就是Git的版本庫,其中保存着本項目的各文件數據、提交記錄、分支、配置等等數據。如果我們把.git目錄刪除的話,版本庫也就丟失了。這一點和SVN不同,SVN會把相關數據分散到各個文件所在的目錄中。

  • 工作區(Working Directory)
    工作區就是版本倉庫所在的目錄,其中的文件處於Git版本庫的管理之下。使用init或clone創建一個新的版本庫後,當前目錄就成爲了工作區。

  • 本地倉庫 vs 遠程倉庫
    首先,本地倉庫和遠程倉庫沒有本質區別。在使用Git時,爲了方便團隊成員之間交換代碼,通常會專門部署一臺“服務器”作爲公共倉庫,每個人可以向公共倉庫中提交自己的代碼,也可以從公共倉庫中更新其他人的最新提交。對大家來說,這個公共倉庫就是一個遠程倉庫。

  • 克隆(clone)
    克隆就是複製一個已經存在的版本庫。例如我們可以將公共版本庫(遠程倉庫)克隆一份到自己的電腦上。

  • 提交(commit)
    將工作區中的代碼合併到版本庫中的操作就叫提交。每一次提交都會在版本庫中留下一個記錄,日後可以用其來進行對比、回退等操作。換句話說,處於工作區中但仍未提交的修改不會受到Git的保護,如果文件被刪除了,或者改錯了,將無法回退到之前的某個正確的狀態(如果文本編輯器或IDE還沒關的話說不定能彌補回這個錯誤)。

  • 推送(push) vs 拉取(pull)
    將工作區中的代碼合併到本地倉庫的操作叫做提交,而在版本庫之間進行合併操作就不是提交了,叫做推送。因爲對Git來說,兩個版本庫之間的關係是平等的,不存在誰“提交”給誰一說。

相應地,從另一個倉庫中把代碼合併到本地倉庫的過程就叫拉取。

  • 分支
    每次提交是有先後關係的,正常來說,所有提交將會串成一條直線。而分支就是在原本的直線上分出去的岔路。一個分支從分出去的那一刻起,在其上的修改將完全獨立於其他分支(除非你顯式地將2個分支合併到一起)。

分支的演進過程很像物種的進化。物種在後代之間產生不同的變異,當一個羣體中的變異積累到一定程度時,該羣體很有可能有機會分化爲一個新的物種,此後,新物種與原物種之間將平行進化。這個比喻只適用於演化出新分支的過程,但自然界中兩個物種之間不太可能會合並(人工干預除外)

Git工作流

在這裏插入圖片描述

GIt常用命令速查

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章