1. 程式人生 > 實用技巧 >git基礎

git基礎

everything-is-local

Author:Shine

Version:9.0.2

目錄

一、引言


  • 在單人開發過程中,需要進行版本管理,以利於開發進度的控制。

  • 在多人開發過程中,不僅需要版本管理,還需要進行多人協同控制

二、介紹


  • Git是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。
  • Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。
  • 官網:https://git-scm.com/

三、Git安裝


3.1 下載Git

下載Git https://git-scm.com/downloads

下載git

3.2 安裝

安裝,除了安裝位置外,其他一直下一步即可

3.3 基本配置

  • 安裝後,開啟git的cmd視窗 ,自報家門

  • 如下資訊會在提交程式碼時要使用,記錄在你的每次提交中。以後才知道哪次提交是誰做的。

git config --global user.name "Your Name"  #使用者名稱
git config --global user.email "[email protected]"  #郵箱
# 檢視資訊
git config -l 

3.4 測試

測試:cmd中執行 ,檢視git版本

git version  

四、架構


  • 版本庫:工作區中有一個隱藏目錄 .git,這個目錄不屬於工作區,而是git的 版本庫,是git管理的所有內容

  • 暫存區:版本庫中包含一個臨時區域,儲存下一步要提交的檔案。

  • 分支:版本庫中包含若干分支,提交的檔案儲存在分支中

架構圖

五、倉庫


對應的就是一個目錄,這個目錄中的所有檔案被git管理起來。

以後會將一個專案的根目錄,作為倉庫。

倉庫中的每個檔案的改動 都由git跟蹤。

5.1 新建倉庫

選擇一個目錄,執行指令:git init

新建倉庫 倉庫目錄

5.2 工作區

執行git init的目錄即為工作區,如上例,D:\repo1目錄即為工作區【不包含.git目錄】

所有檔案,都首先在工作區新建,然後可以存入倉庫(版本庫),進行版本控制。

5.3 暫存區

暫存區也在 .git 目錄內,工作區的檔案進入倉庫時,要先進入暫存區。

5.4 分支

版本控制,簡單說,就是記錄檔案的諸多版本,分支就是這些版本的最終記錄位置。

六、基本操作


6.1 檢視倉庫狀態

執行 git status 可以看到工作區中檔案的狀態

未記錄過的檔案,是未跟蹤狀態

6.2 暫存檔案

執行 git add . 將工作區中的檔案全部存入暫存區

將工作區中的檔案存入暫存區

6.3 提交檔案

執行 git commit -m "這裡寫提交的描述資訊" 作用是將暫存區的檔案存入分支,形成一個版本

提交檔案,形成一個版本

七、遠端倉庫


第5章中的倉庫,其實是本地倉庫。

當多人協同開發時,每人都在自己的本地倉庫維護版本。

但很重要的一點是,多人之間需要共享程式碼、合併程式碼,此時就需要一個遠端倉庫

7.1 遠端倉庫工作模式

遠端倉庫工作模式

7.2 遠端倉庫選型

7.3 基本操作

每個開發人員,在面對遠端倉庫時,會面臨的一些基本操作。

7.3.1 註冊git伺服器賬號

碼雲 註冊賬號,並登入。

進入公司後,很可能會使用公司自己搭建的git伺服器,則賬號向領導索要即可

點選註冊,完成註冊過程
登入後顯示主頁
7.3.2 新建遠端倉庫
建立遠端私有倉庫-01
建立遠端私有倉庫-02
建立遠端私有倉庫-03
7.3.3 本地關聯遠端倉庫

本文件中選用倉庫的 https協議的地址,將此地址關聯到本地git中

如此後,本地即可用“origin” 代指遠端倉庫
7.3.4 推送檔案到遠端倉庫

將本地倉庫中已經commit的內容push到遠端倉庫,以共享自己的程式碼。

push
輸入憑證,如此碼雲才能接受此次上傳的內容
7.3.5 克隆遠端倉庫

如果倉庫已經由別人建立完畢,我們需要其中的內容,則可以通過 git clone 將其複製到本地。

新建目錄“repo2”,然後在其中執行 git clone
遠端倉庫,複製到本地,並自動初始化為一個本地倉庫
7.3.6 程式碼共享

多人協同開發時,寫好程式碼的git push 上傳到遠端倉庫;需要程式碼的 git pull 拉取程式碼即可。

有人再次將本地倉庫內容,上傳到了遠端倉庫
重點:此時另一方如果想獲得更新,則需要做一次拉取 git pull
7.3.7 命令彙總
命令 描述
git remote add 標識名(master) 遠端地址 本地關聯遠端倉庫
git push 標識名 master 將本地倉庫內容上傳到遠端倉庫
git pull 標識名 master 從遠端倉庫下載內容到本地倉庫
git clone 遠端地址 將遠端倉庫複製到本地,並自動形成一個本地倉庫

八、分支


8.1 分支簡介

  • 分支,是一個個版本最終儲存的位置。

  • 分支,就是一條時間線,每次git commit形成一個個版本,一個個版本依次儲存在分支的一個個提交點上。

分支由多個提交點組成,分支上會有一個指標,預設總是指向最新的提交點

8.2 分支操作

8.2.1 檢視分支
  • 檢視當前倉庫的分支 git branch

  • 倉庫中預設只有 master 分支

  • 執行git commit時,預設是在master分支上儲存版本。

預設只有master分支
8.2.2 建立分支
  • 在商業專案開發過程中,我們不會輕易的在master分支上做操作。

  • 我們會新建一個開發用的分支,在此分支上做版本的記錄。

    當代碼確實沒有問題時,才會將開發分支上成熟的程式碼版本新增到master分支上。

  • 保證開發過程中,可以及時記錄版本,又保證master分支上每個提交點都是穩健版本。

建立分支
8.2.3 切換分支
  • 預設情況下,當前使用的分支是 master分支

  • 可以切換到 dev分支,則後續的git commit 便會在dev分支上新建版本(提交點)

切換分支
再次檢視分支情況

8.3 新建分支細節

新建分支時,新分支,預設有哪些內容?分支中包含了哪些次提交?

8.3.1 新分支初始內容

每個分支都有一個指標,新建一個分支,首先是新建一個指標

而且新分支的指標會和當前分支指向同一個提交點

新分支包含的提交點就是從第一個提交點到分支指標指向的提交點。

每個分支都有一個指標,新建一個分支,首先是新建一個指標
8.3.2 多分支走向

在master分支和新分支,分別進行 git addgit commit

分支情況如下圖:

master分支未動,在dev分支增加一次commit
master分支增加一個commit,dev分支再增加一個commit
8.3.3 分支提交日誌

檢視分支的提交日誌,進而看到分支中提交點的詳細情況。

提交情況如下
檢視當前分支的提交日誌

8.4 分支合併

兩個分支內容的合併

git merge 分支a 合併分支a

合併的方式有兩種:快速合併 和 三方合併。

8.4.1 快速合併

如果分支A當前的修改,是完全基於分支B的修改而來,則B分支合併A分支,就是移動指標即可。

合併前分支狀態
快速合併效果(master 合併 dev)
8.4.2 三方合併

在不具備快速合併的條件下,會採用三方合併。

合併前,分支狀態
三方合併,將23的更改都累加在1上,形成新的提交點

三方合併,它是把兩個分支的最新快照(2 和 3)以及二者最近的共同祖先(1)進行三方合併,合併的結果是生成一個新的快照(並提交)

8.4.3 合併衝突

兩個分支進行合併,但它們含有對同一個檔案的修改,則在合併時出現衝突,git無法決斷該保留改檔案哪個分支的修改。

8.4.3.1 衝突演示

場景模擬如下:

master分支修改hig.txt檔案
dev分支修改hig.txt

在master分支 合併 dev分支

合併dev分支

此時,開啟hig.txt 檔案:

衝突後,git會將兩個分支的內容都展示在檔案中
8.4.3.2 衝突解決

出現衝突後,如要由兩個開發人員當面協商,該如何取捨,為衝突檔案定義最終內容。

解決方案:

  1. 保留某一方的,刪除另一方的
  2. 保留雙方的
  3. 但無論如何,要記得刪除 <<<< ==== >>>> 這些
  4. 本質是兩人協商為衝突的內容,定製出合理的內容。
根據協商,再次編輯檔案
提交 再次編輯後的檔案

九、Idea關聯Git


9.1 關聯Git

File > Settings 關聯過程是自動的

此處關聯是Idea可以自動完成的

9.2 建立倉庫

  • 新建專案後,將專案目錄建立為git倉庫

  • 注意: 要在建倉庫前,設定忽略檔案 ".gitignore"

    作用:被忽略的檔案會被版本記錄忽略,版本中不包含它們。

    範圍:不需要和其他開發共享的檔案,具體見下圖。

建立倉庫前,先新增忽略檔案
將專案目錄初始化為一個倉庫

9.3 提交-commit

建立好倉庫後,做第一次提交。

選擇提交選單
選擇提交檔案,定義提交資訊
之後會有些友好提示,可以忽略,點選“commit”即可

9.4 建立分支

新建開發分支

點選右下角連結,即可
新建分支
檢視當前分支

9.5 上傳到遠端倉庫(push)

  • 請首先參照第7章,建立一個遠端倉庫。

  • 要求是裸庫,且建議庫名和專案名同名。

選擇push選單
定義遠端倉庫地址
執行,push操作
push成功後 ,彈窗提示

9.6 複製到本地倉庫(clone)

如果有建好的遠端倉庫,比如公司內已經在用的倉庫,或者github,碼雲上的一些公開倉庫,

可以將遠端倉庫的專案複製到本地使用。

點選克隆選單
輸入如遠端倉庫地址
開啟專案
開啟專案,選項

9.7 更新本地專案

如果遠端倉庫有更新,則你的本地專案也需要一起更新。

選擇pull選單
執行 pull操作
更新日誌顯示

9.8 衝突解決

合併分支時,如果出現衝突,則需要解決衝突。

衝突出現,彈窗中可以選擇如下
也可以直接修改衝突檔案,然後commit即可

十、多人協同開發


多人開發協同,git操作

10.1 專案管理員( 專案經理 )

1> 由管理員負責建立一個遠端庫,初始的庫中什麼也沒有,為裸庫。庫的名稱建議和專案同名

2> 管理員會在idea中建立一個初始專案,其中包含.gitignore檔案。 並在專案根目錄下 建立本地庫。並建立 dev分支。

3> 管理員將本地庫上傳到遠端庫

4> 將其他開發人員拉入遠端庫的 開發成員列表中 ,使得其他開發人員可以訪問該遠端庫。

流程如下:

點選新增成員
選擇直接新增
提交
檢視已新增的開發成員

5> master分支設定為 protected分支,只有管理員有許可權將程式碼合併到其中。dev分支設定為 常規分支所有開發人員 都可以其中合併程式碼

進入分支設定
設定保護分支,讓master分支不能被隨更改

10.2 開發人員

  • 初始化:在idea中clone 遠端庫,獲得專案。會建立本地庫

  • 後續的開發中,都要在dev分支上進行。開發完一個功能並測試通過後就commit 提交到本地的dev分支中,然後 上傳(push)到遠端dev分支中。

  • 需要更新專案內容時,通過 pull 從遠端倉庫拉取內容。

  • 注意:多人協同時,每次在 push 到遠端庫前,都先做一次pull,一來是把遠端最新內容合併到本地,二來是核實本地內容是否和遠端內容有衝突。

  • 後續的開發,會接到一個個的功能任務,往復操作 2>、3>、4> 而已。

十一、經典問題


在使用https協議做push時,如果曾經使用過碼雲,但密碼有過改動,此時會報錯

使用https協議報錯

解決方案: 控制面板 》 憑據管理器 》 刪除對應憑證,再次使用時會提示重新輸入密碼。

刪除之前的碼雲憑證,然後重新push即可