Git


Git

一、Git概述

(一)什么是Git?

Git是一個開源的分布式版本控制系統(Distributed Version Control System,簡稱DVCS)。可以有效、高速地處理從很小到非常大的項目版本管理。

(二)什么是版本控制系統?

版本控制系統能追蹤項目,從開始到結束的整個過程。對編程人員而言,版本控制技術是團隊協作開發的橋梁,助力於多人協作同步進行大型項目開發。軟件版本控制系統的核心任務:查閱項目歷史操作記錄、實現協同開發。

(三)常見的版本控制系統

① 集中式版本控制工具
集中式版本控制工具,版本倉庫是集中存放在中央服務器的,team里每個人工作時,從中央 服務器下載代碼。每個人個人修改后,提交到中央版本倉庫。提交(commit)代碼需要聯網。如:svn
這會造成一個明顯的問題:單點故障

image

② 分布式版本控制工具
分布式版本控制系統可以沒有 “中央服務器”,每個人的電腦上都是一個完整的版本倉庫,這樣工作的時候,不需要聯網。因為版本倉庫就在你自己的電腦上。多人協作只需要各自修改,開發完成即可,推送給對方【聯網】,推送的時候是將整個版本倉庫推過去。如:Git

這個共享版本庫一般指的是代碼托管平台,比較有名就是github,gitee

image

(四)Git的特點

① 速度、簡單的設計
② 對非線性開發模式的強力支持(允許成千上萬個並行開發的分支)
③ 完全分布式
④ 有能力高效管理類似 Linux 內核一樣的超大規模項目(速度和數據量)
⑤ 協同開發

image

Clone:克隆,從遠程倉庫中克隆代碼到本地倉庫,第一次操作
Push:推送,代碼完成后,需要和團隊成員共享代碼時,將代碼推送到遠程倉庫。
Pull:拉取,從遠程庫拉代碼到本地庫,自動進行合並(merge),最后放到工作區。

image

checkout:將本地倉庫的內容檢出到工作區
add:在提交前先將代碼提交到暫存區
commit:提交到本地倉庫

(五)基本概念

本地倉庫: 在本地主機上的一個代碼庫,可以獨立存在,也可以與遠程倉庫進行關聯

工作區:對任何文件的修訂(增刪改),都先放在工作區,工作區不與任何倉庫分支進行關聯 暫存區:把修訂的文件,從工作區經過add(添加)后與某一個倉庫分支進行關聯,只要進 入緩存區的文件才能commit(提交)到本地倉庫。

遠程倉庫 : 在局域網或互聯網上的一個主機,存放代碼庫的主機或平台,比如GitHub、 Gitee.com(碼雲)

分支:代碼存放在倉庫,默認是主分支(master),可以在主分支基礎上創建很多子分支,比如 develop(開發)、bugfix(bug修復)等。

二、Git的下載和安裝

(一)下載

下載地址:https://git-scm.com/download

image

(二)安裝

傻瓜式安裝:一路下一步。安裝完成后在電腦桌面右擊顯示
注:
	Git GUI Here:Git提供的圖形界面工具
	Git Bash Here:Git提供的命令行工具

image

三、Git的基本配置

1.安裝完成 Git 后,正式使用git前,是需要進行一些全局設置的,如用戶名、郵箱。
設置全局用戶名
git config --global user.name "your name"
設置郵箱
git config --global user.email "your email"

image

以上配置信息默認存儲在用戶目錄下,如果設置錯誤,可以刪除以下如圖文件,重新操作以上命令即
可。

image

  1. 查看配置信息:git config --list

image

  1. 構建本地倉庫:要使用Git對我們的代碼進行版本控制,首先需要構建本地倉庫
    ① 在本地初始化一個Git倉庫
    ② 從遠程倉庫克隆一個倉庫

本地倉庫的相關操作

  1. 在本地初始化一個Git倉庫:
  • 在電腦的任意位置創建一個空目錄作為我們的本地Git倉庫
  • 進入這個目錄中,點擊右鍵打開Git bash窗口
  • 執行命令Git init
    如果在當前目錄中看到.git文件夾(此文件夾為隱藏文件夾)則說明Git倉庫創建成功
  1. 查看文件狀態:
    git status [-s]

image

  1. 將文件添加(修改)到版本庫
    要將一個文件納入到版本庫管理,首先要將其添加到暫存區,然后才能提交到倉庫中。
    添加單個文件到暫存區
    git add Readme.txt
    將當前目錄下所有修改添加到暫存區,除按照規則忽略的之外
    git add .
  1. 將暫存區中的文件,提交到倉庫中
    如果暫存區有文件,則將其中的文件提交到倉庫
    git commit
    帶評論提交,用於說明提交內容、變更、作用等
    git commit -m 'your comments'
  1. 查看提交歷史記錄
    有的時候,是會需要查看自己做過哪些提交,來回顧自己完成的部分。或者需要尋找某個具體的提交來
    查看當時的代碼。
    git log # 顯示所有提交的歷史記錄
    git log --pretty=oneline # 單行顯示提交歷史記錄的內容
  1. 版本回退
    有了 git log 來查看提交的歷史記錄,我們就可以通過 git reset --hard 來回退到我們需要的特定版本,然后使用當時的代碼進行各種操作。
    回退到 commit_id 指定的提交版本
    git reset --hard 'commit_id'
  1. 回到未來的某個提交
    當退回到某個提交的版本以后,再通過 git log 是無法顯示在這之后的提交信息的。但是,通過 git reflog 可以獲取到操作命令的歷史。因此,想要回到未來的某個提交,先通過 git reflog 從歷史命令中找到想要回到的提交版本的 ID, 然后通過 git reset --hard 來切換。
    git reflog
    git reset --hard 'commit_id'
  1. 刪除文件
    在文件未添加到暫存區之前,對想刪除文件可以直接物理刪除。如果文件已經被提交,則需要 git rm
    來刪除
    git rm Readme.txt // 刪除已經被提交過的 Readme.txt
    注意: git rm 只能刪除已經提交到版本庫中的文件。其他狀態的文件直接用這個命令操作是出錯的。

四、分支管理

(一)查看分支

# 查看本地分支信息
git branch
# 查看相對詳細的本地分支信息 
git branch -v
# 查看包括遠程倉庫在內的分支信息 
git branch -av

注意:前面帶有*號,這標識我們當前所在的分支

(二)創建分支

# 新建一個名稱為 dev 的分支 
git branch dev

(三)切換分支

# 新建完 dev 分支以后,通過該命令切換到 dev 分支 
git checkout dev
注意:當我們創建完分支以后,我們需要切換到新建的分支,否則,所有的修改,還是在原來的分支上。事實上,所有的改動,只能影響到當前所在的分支。

(四)創建並切換分支

# 新建 dev 分支,並切換到該分支上 
git checkout -b dev

(五)合並分支

# 切換回 master 分支
git checkout master
# 將 dev 分支中的修改合並回 master 分支 
git merge dev
注意:分支修改文件中如果有換行的話會報錯

image

解決:Git默認配置替換回車換行成統一的CRLF,我們只需要修改配置禁用該功能即可。
git config --global core.autocrlf false

(六)刪除分支

	當之前創建的分支,完成了它的使命,如 Bug 修復完,分支合並以后,這個分支就不在需要了,就可 以刪除它。
# 刪除dev分支 
git branch -d dev

五、遠程倉庫

現在我們已經在本地創建了一個Git倉庫,又想讓其他人來協作開發,此時就可以把本地倉庫同步到遠 程倉庫,同時還增加了本地倉庫的一個備份。那么我們如何搭建Git遠程倉庫呢?我們可以借助互聯網上提供的一些代碼托管服務平台來實現,其中 比較常用的有GitHub、碼雲等。
-- GitHub( 地址:https://github.com/ )是一個面向開源及私有軟件項目的托管平台,因為只支持 Git 作為唯一的版本倉庫格式進行托管,故名GitHub。
-- 碼雲(地址: https://gitee.com/ )是國內的一個代碼托管平台,由於服務器在國內,所以相比於 GitHub,碼雲速度會更快。
接下來我們演示如何將本地倉庫中的代碼同步到github。和碼雲的操作一模一樣

(一)注冊賬號

① 第一步,點擊注冊按鈕

image

② 填寫真實信息

image

③ 郵箱驗證

(二)登錄使用

image

創建倉庫

image

填寫倉庫詳情

image

六、同步遠程倉庫

image

(一)ssh配置

SSH是英文Secure Shell的簡寫形式。通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間 人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處 就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。
注:使用SSH同步方式需要先生成密鑰並在Gitee配置公鑰

執行命令,生成公鑰和私鑰:
	ssh-keygen -t rsa
執行命令完成后,在window本地用戶.ssh目錄C:\Users\用戶名.ssh下面生成如下名稱的公鑰和私鑰
密鑰生成后需要在gitee上配置密鑰,本地才可以順利訪問。

image

image

在git工具上輸入指令 ssh-keygen -t rsa 執行后,會在C:\Users\用戶名 下 一個名為.ssh的文件夾中找到公鑰

image

使用記事本的方式打開id_rsa.pub 把里面的公鑰內容復制到網頁公鑰文件域中。

(二)添加遠程倉庫地址

git remote add origin 遠程倉庫地址

七、遠程倉庫的操作

(一)推送本地內容到遠程倉庫

# 在本地倉庫更新內容 添加暫存區
git add .
# 提交內容
git commit -m '信息'
# 當本地倉庫中,代碼完成提交,就需要將代碼等推送到遠程倉庫,這樣其他協作人員可以從遠程倉庫同步內容。
# 第一次推送時使用,可以簡化后面的推送或者拉取命令使用 
git push -u origin master
# 將本地 master 分支推送到 origin 遠程分支
git push origin master
	注意: 
		① git push -u origin master ,第一次使用時,帶上 -u 參數,在將本地的 master 分支推送 到遠程新的 master 分支的同時,還會把本地的 master 分支和遠程的 master 分支關聯起來。
		② 推送之前,需要先pull遠端倉庫,如果發現提交版本不一致,出現錯誤

(二)拉取

在多人協作過程中,當自己完成了本地倉庫中的提交,想要向遠程倉庫推送前,需要先獲取到遠程倉庫的最新內容。使用如下命令
git fetch origin master
git pull origin master
git fetch 和 git pull 之間的區別:
git fetch 是僅僅獲取遠程倉庫的更新內容,並不會自動做合並。
git pull 在獲取遠程倉庫的內容后,會自動做合並,可以看成 git fetch 之后 git merge 。

從遠程倉庫拉取文件注意事項:
如果本地倉庫是手動創建,並不是從遠程倉庫克隆的,那么分支的關聯包括遠程倉庫的歷史記錄都不會生成。需要手動配置。

1- 建立和遠程分支的關聯(非必要)
git branch --set-upstream-to=origin/master master
2- 允許在歷史記錄不關聯的情況下拉取文件
git pull origin master --allow-unrelated-histories

(三)解決合並沖突

在一段時間,A、B用戶修改了同一個文件,且修改了同一行位置的代碼,此時會發生合並沖突。
例如:
A用戶在本地修改代碼后優先推送到遠程倉庫,此時B用戶在本地修訂代碼,提交到本地倉庫后,也需 要推送到遠程倉庫,此時B用戶晚於A用戶推送,故需要先拉取遠程倉庫代碼,經過合並后才能推送代 碼。在B用戶拉取代碼時,因為A、B用戶同一段時間修改了同一個文件的相同位置代碼,故會發生合並 沖突。

解決:
	① 先拉取代碼
	② 打開代碼解決沖突
	③ 再提交
    
    
工作技巧: 推送要早,bug要少

(四)從遠程倉庫克隆

	Git 克隆的是該 Git 倉 庫服務器上的幾乎所有數據(包括日志信息、歷史記錄等),而不僅僅是復制工作所需要的文件。 當你 執行 git clone 命令的時候,默認配置下遠程 Git 倉庫中的每一個文件的每一個版本都將被拉取下來。
	如果你本地沒有倉庫,希望從已有的遠程倉庫上復制一份代碼,那么你需要 git clone 。
	# 通過 https 協議,克隆 Github 上 git 倉庫的源碼
	git clone https://github.com/lagou-zimu/repo1.git 
	# 通過 ssh 協議,克隆 Github 上 git 倉庫的源碼
	git clone git@github.com:lagou-zimu/repo1.git

八、Idea中集成Git

(一)在idea中配置Git

image

(二)Idea的Git操作

1. 初始化並提交項目到遠程倉庫
① 初始化並提交項目到遠程倉庫 【項目leader操作】
執行步驟:
	1. 在GitHub/碼雲中創建遠程倉庫 
	2. 將工程交給Git管理
	3. 提交到本地倉庫
	4. 推送到遠程倉庫
② 在gitee上創建倉庫
③ 將工程交給Git管理

image

④ 配置忽略文件

image

⑤ 提交到本地倉庫

image

image

⑥ 推送到遠程倉庫

image

image

2. 克隆遠程倉庫到本地【開發人員】
① 從遠程倉庫克隆

image

image

(三)Idea中Git的常見操作【開發人員重點】

① 新增文件:新文件狀態紅色,未進入暫存區

image

加入git之后,紅色變綠色,已經進入暫存區

image

② 編輯文件:修改文件 變成藍色
正常編輯的文件默認放在暫存區,不需要再添加到暫存區

image

③ 重置文件到修改前
比如修訂了某一文件,需要重置到修改文件之前的狀態,選擇文件,右鍵菜單:選擇Git--->Revert
重置后,文件顏色自動消失,說明已重置到修改之前的狀態。

image

④ 提交當前文件
⑤ 本地倉庫推送到遠程倉庫
操作步驟:
	1. 推送前一定要先拉取遠程倉庫對應分支
	2. 如果有沖突,先解決沖突,並提交到本地倉庫 
	3. 推送當前分支到遠程倉庫

沖突:如果A、B兩個分支都在操作同一文件。當A分支提交遠程倉庫之后,B分支再提交的話會產生沖突
解決:先拉取,解決完沖突,再push

image

image

image

image

再推送到遠程倉庫

(四)分支操作

操作步驟:
	1. 創建分支
	2. 切換分支執行操作
	3. 執行合並操作,master合並dev
	4. 同步遠程倉庫
① 創建分支

image

image

② 切換分支執行操作

image

③ 執行合並操作(將dev分支合並到master分支)

image

image

④ 同步遠程倉庫

image

注意

總結一下:本地倉庫有文件,遠程倉庫也有文件,正確姿勢:

1,git remote add origin 遠程倉庫地址

2,git pull origin master --allow-unrelated-histories

3,git branch --set-upstream-to=origin/master master

4,git push


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM