理解Git Repository 倉庫

2021-06-19 03:25:54 字數 2395 閱讀 8026

原文出處:感覺對git講解的比較好,翻譯下來,便於自己學習和參考。對一些名詞保留了英文。

1、repository(倉庫)包含的內容

git的目標是管理乙個工程,或者說是一些檔案的集合,以跟蹤它們的變化。git使用repository來儲存這些資訊。乙個倉庫主要包含以下內容(也包括其他內容):

(1) 許多commit objects

(2)到commit objects的指標,叫做heads

git的倉庫和工程儲存在同乙個目錄下,在乙個叫做.git的子目錄中。

2、commit objects

commit objects包含 三個部分:

(1) 一組檔案的集合,代表工程在特定時間點上的乙個狀態。

(2)到父commit objects的指標

(3)乙個sha1名,乙個40個字元的字串,用來唯一標示commit object。這個名字是通過與commit objects相關的內容通過雜湊運算得到的,因此,相同的commits具有相同的名字。  

通常,乙個commit object具有唯一的父commit object。但是在特殊情況下(如分支合併時),乙個commit  object也可能有多個父 commit object。

乙個工程總是會有乙個commit object沒有任何的父commit object,這是對倉庫的第一次 commit。

git的核心思想就是操作所有的commit構成的圖結構。

3、heads

heads僅僅是指向乙個commit的指標。每個head都有乙個名字。預設情況下,在每個倉庫下都有乙個head,叫做master。乙個倉庫可以包含任意數量的heads。在任何時候,乙個head被選為「當前head」。這個head的別名為head,每個字母都是大寫。

"head"(全部小寫)可以指倉庫中的任意乙個head,而"head"(全部大寫),僅僅指的是當前有效的head。

4、乙個簡單的倉庫

要建立乙個倉庫,為該工程建立乙個目錄,進入該目錄,執行命令 git init,這個目錄不必是空目錄。

mkdir [project]

cd [project]

git init

這樣,就在[project]目錄下建立了乙個 .git目錄

要建立乙個commit,你要做以下事情:

(1)告訴git這個commit包含那個檔案,使用git add命令。如果乙個檔案在前一次commit之後沒有改變,git自動將這個檔案新增到你要執行的commi中去。因此,你只需要新增你要新增或者是修改的檔案。要注意,對目錄的新增是遞迴進行的,因此git add將會新增任何的改變。

(2)呼叫git commit來建立乙個commit object。新的commit object將會把當前的head作為它的父親(新的commit執行後,head將會指向新的commit object)

使用git commit -a命令會自動新增所有修改的檔案(新建的檔案不包含在內)

要注意的是,如果你修改了檔案,但是沒有新增它,那麼git將會把之前版本的檔案包含到這個commit中。

例如你建立了三個commit,你的倉庫將會是這個樣子:

----> time ---->

(a) <-- (b) <-- (c)

master

head

(a)、(b)、(c) 分別為第乙個、第二個和第三個commit。

其他的比較有用的命令:

(1)git log:列出所有從head到初始commit的日誌。(當然它的功能不止這些)

(2) git status:列出當前工程的狀態和head之間的那些檔案發生了改變。檔案有三中狀態:新的沒有被新增的檔案(使用git add命令)、修改的但是沒有被新增的檔案、已經被新增的檔案(即表明檔案狀態已經被記錄)。

(3)git diff:列出head和當前狀態之間的差別。使用--cached選項,它可以比較新新增的檔案之間的區別,否則,它比較沒有被新增的檔案。

(4)git mv和git rm分別用來標記要被刪除或者重新命名的檔案,與git add類似

我的個人工作流程通常是這個樣子:

(1)進行程式設計

(2)git status來檢視我更改了哪些檔案

(3)git diff [file]來檢視我到底進行了哪些更改

(4)git commit  -a -m [message]來建立commit

5、引用commit:

現在你已經建立了一些commits,怎樣引用乙個特定的commit?git提供了許多中不同的方法:

(1) 通過它的sha1名字,你可以通過git log檢視

(2)通過sha1前面的幾個字元

(3) 通過乙個head。例如,head指向當前commit。你也可以使用名字,如master。

(4)通過^符號。如head^指向當前commit的父commit。

dropout理解 簡易理解

所謂的dropout,從字面意思理解,就是 拋棄 拋棄什麼呢?拋棄的是網路中隱藏層的節點 輸入層和輸出層是由資料型別和問題型別決定的,當然不能動啦!怎麼拋棄呢?dropout有乙個引數p,p的取值介於0和1,含義是每個節點有p概率被拋棄。被拋棄對這個節點有什麼影響呢?dropout對於節點的影響表現...

怎麼理解ESB(純屬個人理解)

背景,隨著公司系統越來越多,系統之間的互動也越來越多,如果服務之家沒有相應的管理支撐的話,將會出現各種點對點,混亂不堪,對於服務之間的解決方案有很多種,這裡介紹下,目前公司用到的,基於soa思想的esb,企業服務匯流排。esb 同步過程可以理解為中介或者 類似 非同步可以理解為快取資料庫,所有客戶端...

MapReduce理解 深入理解MapReduce

化簡 reducing 遍歷集合中的元素來返回乙個綜合的結果。即,輸出表單裡一列數字的和這個任務屬於reducing。input,資料讀入 123456 設定資料輸入 fileinputformat.setinputpaths job,args 0 fileinputformat.setinputd...