剛畢業的大學生,企業要求必須會Git?那麼Git的保姆級教學來了

本篇文章是企業級接軌的文章,我們在公司的開發,並不是一個人獨立完成的,需要團隊協作,那麼在企業中開發使用的很廣泛的工具就是Git,本文從Git的安裝到Git在Idea中集成的操作詳細的講解,甚至連可能出現的異常都給安排上

課代表劃重點:
1.Git架構
2.遠程倉庫的操作
3.對分支的理解(尤其是對應衝突解決)
4.在idea中Git的相關操作

Git概述

概述

在軟件開發過程,每天都會產生新的代碼,代碼合併的過程中可能會出現如下問題:

  • 代碼被覆蓋或丟失
  • 代碼寫的不理想希望還原之前的版本
  • 希望知道與之前版本的差別
  • 是誰修改了代碼以及爲什麼修改
  • 發版時希望分成不同的版本(測試版、發行版等)

因此,我們希望有一種機制,能夠幫助我們:

  • 可以隨時回滾到之前的版本
  • 協同開發時不會覆蓋別人的代碼
  • 留下修改記錄,以便隨時查看
  • 發版時可以方便的管理不同的版本

什麼是版本控制系統

一個標準的版本控制系統 Version Control System (VCS),通常需要有以下功能:

  • 能夠創建 Repository (倉庫),用來保存代碼
  • 協同開發時方便將代碼分發給團隊成員
  • 記錄每次修改代碼的內容、時間、原因等信息
  • 能夠創建 Branch (分支),可以根據不同的場景進行開發
  • 能夠創建 Tag (標籤),建立項目里程碑

版本控制系統的發展史

版本控制系統發展至今有幾種不同的模式:

Local VCS

本地使用 複製/粘貼 的方式進行管理,缺點是無法協同開發

Centralized VCS (Lock,悲觀鎖)

中央集中式版本控制系統團隊共用倉庫,當某人需要編輯文件時,進行鎖定,以免其他人同時編輯時造成衝突。缺點是雖然避免了衝突,但不是很方便。其他人需要排隊才能編輯文件,如果有人編輯了很久或是忘記解鎖就會造成其他人長時間等待的情況。

Centralized VCS (Merge,樂觀鎖)

中央集中式版本控制系統團隊共用倉庫,不採用悲觀鎖方式來避免衝突,而是事後發現如果別人也修改相同文件(衝突),再進行手動修改解決。有很多 VCS 屬於這種類型,如:CVS,Subversion,Perforce 等

中央集中式版本控制系統的共同問題是,做任何操作都需要和服務器同步,如果服務器宕機則會造成無法繼續工作的窘迫。

Distributed VCS

分佈式版本控制系統,本地也擁有完整的代碼倉庫,就不會出現上述集中式管理的問題,即使沒有網絡,依然可以 commit 和看 log,也無需擔心服務器同步問題。如:Git,Mercurial,Bazaar 等就屬於分佈式版本控制系統。缺點是功能比較複雜,上手需要一定的學習時間。

介紹

image-20200608112630939

  • Git 是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。
  • Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
  • Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分佈式版本庫的方式,不必服務器端軟件支持。

Git環境搭建

Git的安裝

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

除了安裝位置以外都直接Next,安裝位置可以自定義

安裝後我們需要做一些初始的設置

//如下信息會在提交代碼時使用,讓別人知道哪次提交是誰提交的修改

git config --global user.name"leiyujia" //你的用戶名

git config --global user.email"[email protected]" //你的郵箱

//查看信息

git config -l

// 測試:在cmd中執行 ,查看git版本

git version

image-20200608113449007

image-20200608113620849

Git的架構

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

暫存區;版本庫中包含一個臨時區域,保存下一步要提交的文件

分支:版本庫中包含着分支,提交的文件存儲在分支中

image-20200608113940183

在計算機的文件系統Git的架構

image-20200608114238637

倉庫

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

以後會將一個項目的根目錄,作爲倉庫

倉庫中的每個文件的改動都由git來跟蹤

新建倉庫

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

image-20200608114824793

就會在目錄下生成一個倉庫

image-20200608115044423

基本操作

查看倉庫狀態

我們先在倉庫的工作區中僅僅是創建新文件abc.txx和def.txt.

執行git status可以看到工作區中文件的狀態

  • 這個指令在操作中可能會經常用到,我們可以用來查看我們哪個文件時未被跟蹤的,哪些文件是未被提交的

image-20200608115429665

暫存文件

僅僅是暫存,而不是真正的提交

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

image-20200608115845790

提交文件

執行`git commit -m “add two files”

  • -m:指的是-message(信息) 後面的雙引號中填寫信息的簡述,讓我們知道此次提交哪裏做了修改

image-20200608120251510

遠程倉庫

前面所說的倉庫實際上是本地倉庫

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

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

簡單的說:遠程倉庫實現了代碼共享和合並的功能

  • 其中共享指的是:每一個開發者都可以把代碼提交到遠程倉庫,也可以藏遠程倉庫中拉取代碼
  • 合併指的是:每個開發者負責一個功能或稱爲模塊,遠程倉科和git能夠把功能和模塊的代碼進行良好的組織,也可能多個開發者對同一個文件(或者代碼)都有修改時,在提交遠程倉庫時,遠程倉庫和git提供衝突解決

image-20200608121204094

倉庫選型

有很多的遠程倉庫可以選擇,比如github(https://github.com/),碼雲(https://gitte.com/);

嚴格的說:github和碼雲都不是倉庫而是git的服務器,我們在服務器上構建我們自己的倉庫

基本操作

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

我們這裏以碼雲舉例

註冊git服務器賬號

碼雲註冊賬號,並登陸

新建遠程倉庫

image-20200608122412813

image-20200608122620708

關聯本地倉庫和遠程倉庫

image-20200608123159133

在本地倉庫中輸入指令 `git remote add origin 複製的HTTPS地址

  • origin是我們給倉庫起的名字,之後在提交和拉取代碼時可能用到

推送文件到遠程倉庫

使用git push origin master

  • master 是我們倉庫的默認分支

image-20200608124334128

image-20200608123831933

克隆遠程倉庫

新建一個空的目錄,執行指令git clone https://gitee.com/leiyujia/my_git2.git

image-20200608124627477

image-20200608124828747

代碼共享

多個本地倉庫(模擬多個開發者的個人本地倉庫)實現和遠程倉庫的共享

多人協同開發時,寫好代碼的git push上傳到遠程倉庫;需要代碼的就使用git pull拉取代碼

image-20200608125539351

image-20200608130622528

最終實現在git3中拉取到了git2倉庫上傳的文件

image-20200608130658307

命令彙總

git remote add 標識名(origin) 遠程地址 本地關聯遠程倉庫
git push 標識名 master 將本地倉庫的內容上傳到遠程倉庫
git pull 標識名 master 從遠程倉庫下載內容到本地倉庫
git clone 遠程地址 將遠程倉庫複製到本地,並自動形成一個本地倉庫
  • 一般情況下,我們第一步就是要clone遠程倉庫到本地,而之後的拉取代碼不使用clone,而是使用pull

分支

分支簡介

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

image-20200608132917845

  • 只有改動的新文件纔會真正存儲,原來爲改動的文件維護的是一個文件的鏈接(指針),指向的是原來版本中的文件

分支基操

查看分支

查看當前倉庫的分支git branch

倉庫中默認只有master分支

執行git commit時,默認在master分支上保存版本

默認只有master分支
image-20200608133452922

創建分支

在商業項目中,我們不會輕易的在master分支上直接進行操作

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

當代碼確實沒有問題時,纔會將開發分支上成熟的代碼添加到master分支

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

創建分支
image-20200608133917340

切換分支

默認情況下,當前使用的分支是master分支

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

切換分支
image-20200608134238345

分支的細節

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

新分支初始內容

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

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

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

每一個分支都有一個指針,新建一個分支,首先是新建一個指針
image-20200608134740614

多分支走向

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

分支情況如下:

master分支未動,在dev分支增加了一次提交點
image-20200608135043685
master分支增加了一次提交點,dev分支再增加一次提交點
image-20200608135128847

分支提交日誌

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

指令爲git log --oneline

或者爲git log查看詳細的日誌

查看提交日誌
image-20200608135621210

image-20200608135902497

分支合併

兩個分支內容的合併

git merge 分支a合併分支a:一般先切換到master分支然後執行

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

快速合併

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

合併前分支狀態
image-20200608140348780
快速合併效果
image-20200608140422149

三方合併

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

合併前分支狀態
image-20200608140559296
  • 在master分支上和dev分支上都有提交
三方合併,將23的更改都累加到1上,形成新的提交點
image-20200608140758429

合併衝突

兩個分支進行合併,但是他們含有對同一文件的修改,則在合併時出現衝突,git無法決斷該保留那個分支的修改

場景模擬在master分支和dev分支都對abc.txt文件進行修改

image-20200608142217801

打開abc.txt文件

image-20200608142450799

衝突解決後,重新提交
image-20200608142634804

在IDEA中關聯Git

關聯git

image-20200608142800974

創建倉庫

image-20200608142936920

然後選擇要創建倉庫的目錄

注意這種方式創建的倉庫默認是在我們的目錄下的所有都進入到倉庫的工作區內

但是往往有些文件是不需要上傳到遠程倉庫中共享的,例如IDEA的一些自動生成的配置文件,jdbc數據庫的賬號密碼的配置文件

這時就需要寫一些git的配置在IDEA中(注意這一步要在把項目創建倉庫之前)

先設置忽略文件".gitignore"

作用:被忽略的文件會被版本記錄忽略,版本終不包含它們

範圍:不需要和其他開發者共享的文件,具體見下圖

創建倉庫淺,先設置忽略文件
image-20200608144121004

提交-commit

點擊提交菜單
image-20200608144757108
填寫描述信息並提交
image-20200608144737415

上傳到遠程倉庫

點擊上傳菜單
image-20200608144926701
填寫遠程倉庫的URL地址
image-20200608145010814
上傳文件(代碼)
image-20200608145148597

在IDEA中創建分支和查看分支提交

新建分支

新建分支
image-20200608145432799

查看分支的提交

查看分支的提交
image-20200608145542855

複製到本地倉庫

如果有建好的遠程倉庫,比如github,碼雲上的一些公開的倉庫

可以將其複製到本地使用

點擊克隆菜單
image-20200608150004910
輸入遠程倉庫地址
image-20200608150045435

更新本地項目

點擊拉取代碼菜單
image-20200608150852180

衝突解決

合併出現衝突時,需要解決衝突

00000000000000002

多人協同開發

多人協同開發,git操作

項目管理員(項目經理)

1>由管理員創建一個遠程庫,初始的庫中什麼也沒有,爲裸庫.庫的名稱建議和項目名稱同名

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

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

4>將其他開發人員拉入遠程看的開發人員列表中,使得其他開發人員可以訪問到遠程庫

流程如下:

點擊管理
image-20200608160602662
點擊添加成員
image-20200608160720409
設置分支的權限
image-20200608161120423

開發人員

1>初始化:在idea中clone遠程庫,獲得項目.會建立本地庫

2>後續的開發中,都要在dev分支上進行.開發完一個功能並測試通過後就commit就提交到本地的dev倉庫中,然後上傳push到遠程倉庫中

3>需要更新項目內容時,通過pull從遠程倉庫拉取內容

4>注意:多人協同時,每次在push到遠程倉庫前,都先做一次pull,一來把遠程最新的內容合併到本地,二來死覈實本地內容是否和遠程倉庫內容有衝突

後續的開發,會接到一個個功能,往復操作2>,3>,4>

經典問題

當我們的碼雲的密碼在近期發生改變時,這時使用遠程倉庫會報錯

改密碼遠程倉庫不能使用報錯
image-20200608162357517

如何解決?

打開windows的憑證管理器中的windows憑證找到碼雲的憑證並刪除
image-20200608162554670

然後在提示中會要求我們重新輸入一次賬號和密碼,然後就能正常操作遠程倉庫了

重新填寫賬號密碼後
image-20200608162715085

raw/master/image-20200608162357517.png) |

如何解決?

打開windows的憑證管理器中的windows憑證找到碼雲的憑證並刪除
image-20200608162554670

然後在提示中會要求我們重新輸入一次賬號和密碼,然後就能正常操作遠程倉庫了

重新填寫賬號密碼後
image-20200608162715085

我是一個普通二本的學生,可能寫的有不周到之處,希望各位大佬指點.讓我們一起努力,不過平庸的生活.
如果您感覺這篇文章有幫助到你,點個贊(你的鼓勵就是我前進的動力).
如果有什麼問題,可以留言我們一起探討
如果有什麼建議,也可以留言給我,我會虛心的接受
最後謝謝您,看完了我的文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章