天天看點

Git&GitHub

1.1實作了解為什麼要使用git&Github(git有什麼優點)

1.大部分操作在本地完成,不需要聯網(但是因為是外國網站使用卡,如何解決?)

2.完整性保證

3.盡可能添加資料而不是删除或修改(就比如小劉、小王都對此代碼進行修改,但是小劉先送出,最後代碼隻有小王改的而沒有小劉改的(被覆寫了)而git不會出現這樣的問題)

4.分支操作非常快捷流暢

5.與Linux指令全面相容

1.2Git是幹什麼用的(不重要)

Git是一款免費、開源的分布式版本控制系統,用于靈活高效地處理任何或小或大的項目。Git是一個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。[2] Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放源碼的版本控制軟體。

Torvalds 開始着手開發 Git 是為了作為一種過渡方案來替代 BitKeeper,後者之前一直是 Linux 核心開發人員在全球使用的主要源代碼工具。開放源碼社群中的有些人覺得 BitKeeper 的許可證并不适合開放源碼社群的工作,是以 Torvalds 決定着手研究許可證更為靈活的版本控制系統。盡管最初 Git 的開發是為了輔助 Linux 核心開發的過程,但是我們已經發現在很多其他自由軟體項目中也使用了 Git。例如 最近就遷移到 Git 上來了,很多 Freedesktop 的項目也遷移到了 Git 上。

1.3Git的結構

1.4git的代碼托管中心

(我們對于這些的了解主要是為了在github上發代碼)

代碼托管中心的任務:維護遠端庫

區域網路環境下

GitLab伺服器           

外網環境下

GitHub

碼雲

本地庫和遠端庫

團隊内部協作

跨團隊協作

本地庫操作

2.1本地庫初始化

指令:git init(git和Linux的指令是相容的,Linux常用指令(為了友善之後出現的Linux的指令在旁邊直接附帶解釋))

問題:為什麼不能看.git的目錄

答:在Linux中以“.”開頭的都隐藏檔案

解決方法:在ls-lA

效果:

設定簽名

2.2基本操作

2.2.1狀态檢視操作( git status)

檢視工作區、暫存區的狀态

2.2.2添加操作(git add[file name])

将工作區的建立、修改添加到暫存區

2.2.3送出操作(git commit-m”commit message”[file name])

将暫存區的内容送出到本地庫

2.2.4檢視曆史記錄操作

2.2.5前進後退

2.2.6删除檔案并找回

2.2.7比較檔案差異

2.2.8指令幫助

2.3分支管理

2.3.1為什麼要分支

在版本控制過程中,使用多條線同時推進多個任務

2.3.2分支的好處

同時并行推進多個功能開發,提高開發效率

各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任何影響。失敗的分支删除重新開始即可。

2.3.3分支操作

實戰操作

1.安裝

打開Git官網下載下傳安裝程式,然後按照預設選項安裝即可。

安裝完成後,可在window任意視窗右鍵,打開Git bash軟體,彈出一個類似cmd的指令行視窗,證明安裝成功。

2.建立檔案夾

在目前目錄下mkdir <檔案夾名稱>

3.本地庫初始化(設定你的使用者名和Email位址)

我們可以檢視一下使用者名和密碼:

注:隻能注冊一次儲存最開始你設定的使用者名和密碼,後來設定的都沒用

如果報錯了

假如我們這時候報錯,證明Git的使用者名和密碼沒有配置成功,我們還可以這樣做:

在使用者主目錄下找到 .git 檔案夾:

然後打開 config 檔案,這是專門用來配置和讀取相應的工作環境變量的,在裡面加上如圖所示内容:

這樣也就完成了對Git使用者名和郵箱的配置。

3.建立版本庫

版本庫(repository)也叫倉庫,可以看做一個目錄,這個目錄裡的是以檔案都由Git進行管理,每個檔案的修改、删除,Git都能跟蹤。

①首先輸入git status來檢視工作區、暫存區的狀态

一般來說我們會的得到這樣的一組代碼

原因是因為我們沒有建立版本庫導緻的先輸入建立一個空文本

輸入一些内容,問題如何退出:先esc再:最後wq儲存退出

再次輸入git status,我們會得到

現在我們添加一下這個文本,當我們再次使用git status檢視時就正常了,而輸入則會恢複道之前的狀态

輸入git commit 來進行送出,我們會的得到這樣的一個頁面:

我們按ESC鍵指令模式輸入:set nu再按i鍵進入編輯模式,輸入,最後按ESC鍵進入指令模式,再輸入:,最後輸入wq進行儲存就可以了

輸入cat good.txt就能看見之前我們在good.txt中添加的文本

注:cat  由第一行開始顯示檔案内容

當我們再次輸入vim good.txt添加新的資訊時,

系統知道我們更新了新的内容,我們可以像之前一樣輸入git add good.txt再輸入git commit 送出,再如之前一樣。也可以輸入git commit -m”...”good.txt

4.版本穿梭

多屏顯示控制方式:

空格向下翻頁

b向上翻頁

q退出

如果添加或修改代碼次數較多可以使用git log --pretty=oneline可以友善我們的檢視

或者git log --oneline(隻選擇哈希值的其中一部分+指針)

再者是git reflog (有利于我們的版本穿梭,會顯示從第一個版本到達我想去的版本需要幾步)

5.前進後退

本質 空指針→HEAD@{移動到目前版本需要多少步}

基于索引值操作【推薦】

目前版本
    
   進行版本穿梭
              

現在的版本

同樣操作回到原來的版本
   
           

使用^符号:隻能後退

注:一個^表示後退一步,n個表示後退n步           

使用~符合:隻能後退

git reset --hard HEAD~n

注:表示後退N步

reset 指令的三個參數對比:

--soft參數 僅僅在本地資料庫移動HEAD指針

--mixed參數 在本地資料庫移動HEAD指針、重置暫存區

--hard參數 在本地資料庫移動HEAD指針、重置暫存區、重置工作區

6.删除檔案并找回

首先我們先簡單的建立一個文本

再将它删除

 rm test.txt 删除test.txt的檔案(帶詢問的删除,需輸入y才能删除)

當我們再次檢視時,就隻有我們原先創造的檔案,并且這次的操作會不被記錄

是以删除這個行為我們也需要進行送出

注:(在此我解釋一下我們這裡的删除并不是真正意義上的删除隻是在我們現在這個版本下此檔案不存在,但在上一個版本中他是存在的,其中兩個時間點的關聯是你已經将這個檔案送出了,而我們找回已删除的文本的方法就是傳回删除之前的那個版本,如果想要徹底删除,除非你把這個文本庫删除掉)

7.比較檔案

git diff[檔案名] 将工作區中的檔案和暫存區進行比較

(我自己的話:将本次改完的檔案與改之前的那個版本進行比較)

git diff本地庫中曆史版本 将工作區中的檔案和本地庫曆史記錄比較

(我自己的話:将此次的版本與之前修改的任意一版進行比較)

不帶檔案名比較多個檔案

(我自己的話:将目前版本和之前修改的每一個版本都進行比較)

像這次我将good.txt的文本進行更改

而我對比不帶檔案名的話它會将所有檔案進行對比

8.分支操作

建立分支

git branch[檔案名]

檢視分支

git branch -v(綠色的地方就是顯示你現在所處的分支上,其實後面的藍字也是我們所在的分支的提示)

切換分支

git checkout[分支名]

這是最終效果

合并分支

①切換到接受修改的分支(被合并,添加新内容)上
      git checkout [被合并的分支的檔案名]

    ②執行merge指令
      git merge[有新内容分支名]
           

而最終的效果是我的second.txt檔案添加了新的文本

解決沖突

沖突的表現

沖突的解決

①編輯檔案,删除特殊符号

②把檔案修改到滿意的程度,儲存退出

③git add[檔案名]

④git commit -m”日志資訊”

注:此時commit一定不能帶具體檔案名不然會顯示錯誤

Hash算法(了解)

哈希是一個系列的加密算法,各個不同的雜湊演算法雖然加密強度不同,但是有以下幾個共同點:

①不管輸入資料的資料量有多大,輸入同一個雜湊演算法,得到的加密結果長度固定。

②雜湊演算法确定,輸入資料确定,輸出資料能夠保證不變Ⅰ

③雜湊演算法确定,輸入資料有變化,輸出資料一定有變化,而且通常變化很大

④雜湊演算法不可逆

Git底層采用的是 SHA-1算法。

以下是git分支管理機制,用我自己的話說:

首先我們剛剛了解了Hash的管理原理,而知道它是因為資料改變不斷更新加密密碼而git是内容更新加密密碼改變但是不覆寫原來的加密密碼。

而git的分支管理的本質是建立和移動指針

在Java中我們移動指針需要new進行初始化,但是在git中我們可以通過checkout來移動指針HEAD的位置