git基礎
everything-is-local
目錄Author:Shine
Version:9.0.2
一、引言
在單人開發過程中,需要進行版本管理,以利於開發進度的控制。
在多人開發過程中,不僅需要版本管理,還需要進行多人協同控制。
二、介紹
- Git是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。
- Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。
- 官網:https://git-scm.com/
三、Git安裝
3.1 下載Git
下載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 工作區
所有檔案,都首先在工作區新建,然後可以存入倉庫(版本庫),進行版本控制。
5.3 暫存區
暫存區也在 .git 目錄內,工作區的檔案進入倉庫時,要先進入暫存區。
5.4 分支
版本控制,簡單說,就是記錄檔案的諸多版本,分支就是這些版本的最終記錄位置。
六、基本操作
6.1 檢視倉庫狀態
執行 git status 可以看到工作區中檔案的狀態
未記錄過的檔案,是未跟蹤狀態 |
---|
6.2 暫存檔案
將工作區中的檔案存入暫存區 |
---|
6.3 提交檔案
執行 git commit -m "這裡寫提交的描述資訊" 作用是將暫存區的檔案存入分支,形成一個版本
提交檔案,形成一個版本 |
---|
七、遠端倉庫
第5章中的倉庫,其實是本地倉庫。
當多人協同開發時,每人都在自己的本地倉庫維護版本。
但很重要的一點是,多人之間需要共享程式碼、合併程式碼,此時就需要一個遠端倉庫。
7.1 遠端倉庫工作模式
遠端倉庫工作模式 |
---|
7.2 遠端倉庫選型
有很多遠端倉庫可以選擇,比如 github(https://github.com/),碼雲(https://gitee.com/);
此兩種可以註冊自己測試使用,但如果是商業專案,需要更多支援需要付費。
公司內部也可以有自己構建的遠端倉庫(http://qianfeng.qfjava.cn:8087/users/sign_in)。
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 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 建立分支
建立分支 |
---|
8.2.3 切換分支
預設情況下,當前使用的分支是 master分支
可以切換到 dev分支,則後續的git commit 便會在dev分支上新建版本(提交點)
切換分支 |
---|
再次檢視分支情況 |
---|
8.3 新建分支細節
新建分支時,新分支,預設有哪些內容?分支中包含了哪些次提交?
8.3.1 新分支初始內容
而且新分支的指標會和當前分支指向同一個提交點。
新分支包含的提交點就是從第一個提交點到分支指標指向的提交點。
每個分支都有一個指標,新建一個分支,首先是新建一個指標 |
---|
8.3.2 多分支走向
在master分支和新分支,分別進行 git add 和 git 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 三方合併
在不具備快速合併的條件下,會採用三方合併。
合併前,分支狀態 |
---|
三方合併,將2 和3 的更改都累加在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 衝突解決
出現衝突後,如要由兩個開發人員當面協商,該如何取捨,為衝突檔案定義最終內容。
解決方案:
- 保留某一方的,刪除另一方的
- 保留雙方的
- 但無論如何,要記得刪除 <<<< ==== >>>> 這些
- 本質是兩人協商為衝突的內容,定製出合理的內容。
根據協商,再次編輯檔案 |
---|
提交 再次編輯後的檔案 |
---|
九、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即可 |
---|