本篇文章是企業級接軌的文章,我們在公司的開發,並不是一個人獨立完成的,需要
團隊協作
,那麼在企業中開發使用的很廣泛的工具就是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 等就屬於分佈式版本控制系統。缺點是功能比較複雜,上手需要一定的學習時間。
介紹
- 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
Git的架構
版本庫:工作區中有一個隱藏目錄
.git
,這個目錄不屬於工作區,而是git的版本庫
,是git管理的所有內容暫存區;版本庫中包含一個臨時區域,保存下一步要提交的文件
分支:版本庫中包含着分支,提交的文件存儲在分支中
在計算機的文件系統Git的架構
倉庫
對應的就是一個
目錄
,這個目錄中所有的文件被git管理起來以後會將一個
項目的根目錄
,作爲倉庫倉庫中的每個文件的改動都由git來跟蹤
新建倉庫
選擇一個目錄,執行指令:
git init
就會在目錄下生成一個倉庫
基本操作
查看倉庫狀態
我們先在倉庫的工作區中僅僅是創建新文件abc.txx和def.txt.
執行
git status
可以看到工作區中文件的狀態
- 這個指令在操作中可能會經常用到,我們可以用來查看我們哪個文件時未被跟蹤的,哪些文件是未被提交的
暫存文件
僅僅是暫存,而不是真正的提交
執行
git add .
將工作區中的文件全部存入暫存區
提交文件
執行`git commit -m “add two files”
- -m:指的是-message(信息) 後面的雙引號中填寫信息的簡述,讓我們知道此次提交哪裏做了修改
遠程倉庫
前面所說的倉庫實際上是本地倉庫
當多人協同開發時,每個人都在自己的本地倉庫維護版本
但是很重要的一點是,多人之間需要共享代碼,合併代碼,此時就需要一個遠程倉庫
簡單的說:遠程倉庫實現了代碼共享和合並的功能
- 其中共享指的是:每一個開發者都可以把代碼提交到遠程倉庫,也可以藏遠程倉庫中拉取代碼
- 合併指的是:每個開發者負責一個功能或稱爲模塊,遠程倉科和git能夠把功能和模塊的代碼進行良好的組織,也可能多個開發者對同一個文件(或者代碼)都有修改時,在提交遠程倉庫時,遠程倉庫和git提供衝突解決
倉庫選型
有很多的遠程倉庫可以選擇,比如github(https://github.com/),碼雲(https://gitte.com/);
嚴格的說:github和碼雲都不是倉庫而是git的服務器,我們在服務器上構建我們自己的倉庫
基本操作
每個開發人員,在面對遠程倉庫時,會面臨的一些基本操作
我們這裏以碼雲舉例
註冊git服務器賬號
在
碼雲
註冊賬號,並登陸
新建遠程倉庫
關聯本地倉庫和遠程倉庫
在本地倉庫中輸入指令 `git remote add origin 複製的HTTPS地址
- origin是我們給倉庫起的名字,之後在提交和拉取代碼時可能用到
推送文件到遠程倉庫
使用
git push origin master
- master 是我們倉庫的默認分支
克隆遠程倉庫
新建一個空的目錄,執行指令
git clone https://gitee.com/leiyujia/my_git2.git
代碼共享
多個本地倉庫(模擬多個開發者的個人本地倉庫)實現和遠程倉庫的共享
多人協同開發時,寫好代碼的
git push
上傳到遠程倉庫;需要代碼的就使用git pull
拉取代碼
最終實現在git3中拉取到了git2倉庫上傳的文件
命令彙總
git remote add 標識名(origin) 遠程地址 | 本地關聯遠程倉庫 |
---|---|
git push 標識名 master | 將本地倉庫的內容上傳到遠程倉庫 |
git pull 標識名 master | 從遠程倉庫下載內容到本地倉庫 |
git clone 遠程地址 | 將遠程倉庫複製到本地,並自動形成一個本地倉庫 |
- 一般情況下,我們第一步就是要clone遠程倉庫到本地,而之後的拉取代碼不使用clone,而是使用pull
分支
分支簡介
- 分支:是一個個版本最終存儲的位置
- 分支:就是一條時間線,每次
git commit
形成一個個版本,一個個版本依次存儲在分支的一個個提交點上
- 只有改動的新文件纔會真正存儲,原來爲改動的文件維護的是一個文件的鏈接(指針),指向的是原來版本中的文件
分支基操
查看分支
查看當前倉庫的分支
git branch
倉庫中默認只有
master
分支執行
git commit
時,默認在master
分支上保存版本
默認只有master 分支 |
---|
創建分支
在商業項目中,我們不會輕易的在
master分支
上直接進行操作
我們會新建一個
開發用的分支
,在此分支上做版本的記錄
當代碼確實沒有問題時,纔會將開發分支上成熟的代碼添加到
master分支
上
既保證開發過程中,可以及時記錄版本,又保證在master分支上每個提交點都是穩定版本
創建分支 |
---|
切換分支
默認情況下,當前使用的分支是
master
分支
可以切換到
dev分支
,則後續的git commit
便會在dev分支上提交新建版本
切換分支 |
---|
分支的細節
新建分支時,新分支,默認有哪些內容?分支中包含了哪些次提交?
新分支初始內容
每一個分支都有一個
指針
,新建一個分支,首先是新建一個指針
.而且新分支的指針都和當前分支指向
同一個提交點
新分支包含的提交點就是從第一個提交點到分支指針指向的點
每一個分支都有一個指針,新建一個分支,首先是新建一個指針 |
---|
多分支走向
在master分支和新分支,分別進行
git add
和git commit
分支情況如下:
master分支未動,在dev分支增加了一次提交點 |
---|
master分支增加了一次提交點,dev分支再增加一次提交點 |
---|
分支提交日誌
查看分支的提交日誌,進而看到分支中提交點的詳細情況
指令爲
git log --oneline
或者爲
git log
查看詳細的日誌
查看提交日誌 |
---|
分支合併
兩個分支內容的合併
git merge 分支a
合併分支a:一般先切換到master分支然後執行
合併的方式有兩種:快速合併和三方合併
快速合併
如果分支A當前的修改,是完全基於分支B的修改而來,則B分支合併A分支,就是移動指針即可
合併前分支狀態 |
---|
快速合併效果 |
---|
三方合併
在不具備快速合併的條件下,會採用三方合併
合併前分支狀態 |
---|
- 在master分支上和dev分支上都有提交
三方合併,將2 和3 的更改都累加到1 上,形成新的提交點 |
---|
合併衝突
兩個分支進行合併,但是他們含有對同一文件的修改,則在合併時出現衝突,git無法決斷該保留那個分支的修改
場景模擬在master分支和dev分支都對abc.txt文件進行修改
打開abc.txt文件
衝突解決後,重新提交 |
---|
在IDEA中關聯Git
關聯git
創建倉庫
然後選擇要創建倉庫的目錄
注意這種方式創建的倉庫默認是在我們的目錄下的所有都進入到倉庫的工作區內
但是往往有些文件是不需要上傳到遠程倉庫中共享的,例如IDEA的一些自動生成的配置文件,jdbc數據庫的賬號密碼的配置文件
這時就需要寫一些git的配置在IDEA中(注意這一步要在把項目創建倉庫之前)
先設置
忽略文件".gitignore"
作用:被忽略的文件會被版本記錄忽略,版本終不包含它們
範圍:不需要和其他開發者共享的文件,具體見下圖
創建倉庫淺,先設置忽略文件 |
---|
提交-commit
點擊提交菜單 |
---|
填寫描述信息並提交 | |
---|---|
上傳到遠程倉庫
點擊上傳菜單 |
---|
填寫遠程倉庫的URL地址 |
---|
上傳文件(代碼) |
---|
在IDEA中創建分支和查看分支提交
新建分支
新建分支 |
---|
查看分支的提交
查看分支的提交 |
---|
複製到本地倉庫
如果有建好的遠程倉庫,比如github,碼雲上的一些公開的倉庫
可以將其複製到本地使用
點擊克隆菜單 |
---|
輸入遠程倉庫地址 |
---|
更新本地項目
點擊拉取代碼菜單 |
---|
衝突解決
合併出現衝突時,需要解決衝突
多人協同開發
多人協同開發,git操作
項目管理員(項目經理)
1>由管理員創建一個遠程庫,初始的庫中什麼也沒有,爲裸庫.庫的名稱建議和項目名稱同名
2>管理員會在idea中創建一個初始項目,其中包含
.gitignore文件
並在項目根目錄下建立本地庫
,並建立dev分支
3>管理員將本地庫上傳到遠程庫
4>將其他開發人員拉入遠程看的
開發人員列表中
,使得其他開發人員可以訪問到遠程庫
流程如下:
點擊管理 |
---|
點擊添加成員 |
---|
設置分支的權限 |
---|
開發人員
1>初始化:在idea中
clone
遠程庫,獲得項目.會建立本地庫
2>後續的開發中,都要在dev分支上進行.開發完一個功能並測試通過後就
commit
就提交到本地的dev倉庫中,然後上傳push
到遠程倉庫中
3>需要更新項目內容時,通過
pull
從遠程倉庫拉取內容
4>注意:多人協同時,每次在
push
到遠程倉庫前,都先做一次pull
,一來把遠程最新的內容合併到本地,二來死覈實本地內容是否和遠程倉庫內容有衝突
後續的開發,會接到一個個功能,往復操作2>,3>,4>
經典問題
當我們的碼雲的密碼在近期發生改變時,這時使用遠程倉庫會報錯
改密碼遠程倉庫不能使用報錯 |
---|
如何解決?
打開windows的憑證管理器中的windows憑證找到碼雲的憑證並刪除 |
---|
然後在提示中會要求我們重新輸入一次賬號和密碼,然後就能正常操作遠程倉庫了
重新填寫賬號密碼後 |
---|
raw/master/image-20200608162357517.png) |
如何解決?
打開windows的憑證管理器中的windows憑證找到碼雲的憑證並刪除 |
---|
然後在提示中會要求我們重新輸入一次賬號和密碼,然後就能正常操作遠程倉庫了
重新填寫賬號密碼後 |
---|
我是一個普通二本的學生,可能寫的有不周到之處,希望各位大佬指點.讓我們一起努力,不過平庸的生活.
如果您感覺這篇文章有幫助到你,點個贊(你的鼓勵
就是我前進的動力
).
如果有什麼問題,可以留言我們一起探討
如果有什麼建議,也可以留言給我,我會虛心的接受
最後謝謝您
,看完了我的文章