引言:
跟著劉浩老師學習已經很久,期間學會了很多的東西,在寫git相關的博客之前,
我特別想感謝劉浩老師,他今天早上還在那里說昨天晚上熬夜到凌晨五點寫git的筆記,我還在想怎么可能熬夜那么晚呀,但是今天下午當他打開他的gitee網站,
上面清晰的顯示:2021/12/30日4:39提交master分支的記錄(本來想截圖的,沒來得及),我瞬間感覺羞愧(不應該懷疑他),感謝劉浩老師對我的指導,在下確實不才,學東西比較慢,但是跟著劉浩老師學的東西挺多的,
🍅程式員小王的博客:程式員小王的博客
🍅 歡迎點贊 👍 收藏 ?留言 📝
🍅 如有編輯錯誤聯系作者,如果有比較好的文章歡迎分享給我,我會取其精華去其糟粕
🍅java自學的學習路線:java自學的學習路線
- 今日雞湯:
時間不是金錢,不是任何可以失而復得的物質,你一旦把它輕易失去,它就永遠同你無情的分別,最可怕的事情是:它離開你時,還從你身上竊去了最珍貴的財產——青春和生命,
莫等閑,白了少年頭,空悲切,

一、現存專案的問題
- 專案安全性太低 ,電腦壞了沒有就沒了
- 專案很難協同開發(目前是串行開發)
- 專案無端報錯(記錄版本)
- 專案版本混亂 (版本切換)
二、git簡介
1、Git是什么?(借鑒:廖雪峰老師)
- Git是目前世界上最先進的分布式版本控制系統(沒有之一),-
- Git有什么特點?簡單來說就是:高端大氣上檔次!
2、那什么是版本控制系統?
版本控制是一種記錄一個或若干檔案內容變化,以便將來查閱特定版本修訂情況的系統,
三、版本控制工具
1、集中式版本控制工具
Linus一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分布式版本控制系統,集中式和分布式版本控制系統有什么區別呢?
- 集中式版本控制系統,版本庫是集中存放在中央服務器的,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器,中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館,
- 集中式版本控制工具缺點:
服務器單點故障,如果服務器壞了,那什么都沒了<br />容錯性差


2、git分布式版本控制工具
那分布式版本控制系統與集中式版本控制系統有何不同呢?
- 分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你作業的時候,就不需要聯網了,因為版本庫就在你自己的電腦上,既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了檔案A,你的同事也在他的電腦上改了檔案A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了,
- 和集中式版本控制系統相比,分布式版本控制系統的安全性要高很多,因為每個人電腦里都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那里復制一個就可以了,而集中式版本控制系統的中央服務器要是出了問題,所有人都沒法干活了,
- 在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機,因此,分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已,


Git是分布式版本控制系統(Distributed Version Control System,簡稱 DVCS) ,分為兩種型別的倉庫:
本地倉庫和遠程倉庫
本地倉庫:是在開發人員自己電腦上的Git倉庫
遠程倉庫:是在遠程服務器上的Git倉庫
Clone:克隆,就是將遠程倉庫復制到本地
Push:推送,就是將本地倉庫代碼上傳到遠程倉庫
Pull:拉取,就是將遠程倉庫代碼下載到本地倉庫
3、Git歷史
- 很多人都知道,Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟體了,
- Linus雖然創建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為Linux撰寫代碼,那Linux的代碼是如何管理的呢?
- 事實是,在2002年以前,世界各地的志愿者把源代碼檔案通過diff的方式發給Linus,然后由Linus本人通過手工方式合并代碼!
- 你也許會想,為什么Linus不把Linux代碼放到版本控制系統里呢?不是有CVS、SVN這些免費的版本控制系統嗎?因為Linus堅定地反對CVS和SVN,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用,有一些商用的版本控制系統,雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符,
- 不過,到了2002年,Linux系統已經發展了十年了,代碼庫之大讓Linus很難繼續通過手工方式管理了,社區的弟兄們也對這種方式表達了強烈不滿,于是Linus選擇了一個商業的版本控制系統BitKeeper,BitKeeper的東家BitMover公司出于人道主義精神,授權Linux社區免費使用這個版本控制系統,
- 安定團結的大好局面在2005年就被打破了,原因是Linux社區牛人聚集,不免沾染了一些梁山好漢的江湖習氣,開發Samba的Andrew試圖破解BitKeeper的協議(這么干的其實也不只他一個),被BitMover公司發現了(監控作業做得不錯!),于是BitMover公司怒了,要識訓Linux社區的免費使用權,
- Linus可以向BitMover公司道個歉,保證以后嚴格管教弟兄們,嗯,這是不可能的,實際情況是這樣的:
- Linus花了兩周時間自己用C寫了一個分布式版本控制系統,這就是Git!一個月之內,Linux系統的原始碼已經由Git管理了!牛是怎么定義的呢?大家可以體會一下,
- Git迅速成為最流行的分布式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源專案免費提供Git存盤,無數開源專案開始遷移至GitHub,包括jQuery,PHP,Ruby等等,
歷史就是這么偶然,如果不是當年BitMover公司威脅Linux社區,可能現在我們就沒有免費而超級好用的Git了,
GitHub Gitee(碼云) [開源] Gitlib
4、Git作業流程
作業流程如下:
1.從遠程倉庫中克隆代碼到本地倉庫
2.從本地倉庫中checkout代碼然后進行代碼修改
3.在提交前先將代碼提交到暫存區
4.提交到本地倉庫,本地倉庫中保存修改的各個歷史版本
5.修改完成后,需要和團隊成員共享代碼時,將代碼push到遠程倉庫
四、Git下載與安裝
1、下載
下載地址: https://git-scm.com/download
我使用的安裝版本:Git-2.30.0.2-64-bit.exe

2、安裝
傻瓜式安裝,一路下一步
- 在Windows上使用Git,可以從Git官網直接下載安裝程式,然后按默認選項安裝即可,

- 安裝完成后,在開始選單里找到“Git”->“Git Bash”,蹦出一個類似命令列視窗的東西,就說明Git安裝成功!

86151@TJCU MINGW64 /
$ git version
git version 2.30.0.windows.2

- 安裝完成后,還需要最后一步設定,在命令列輸入:
#1.配置當前用戶用戶名
$ git config --global user.name "wanghj"
#2.配置當前用戶郵箱
$ git config --global user.email "15120308630@163.com"
#3.查看配置資訊
git config --list

因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址,你也許會擔心,如果有人故意冒充別人怎么辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的,
注意git config命令的--global引數,用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址,
查看配置
$ git config --list
五、Git使用
1、創建使用版本庫
a、創建一個目錄(內部所有檔案可以被Git管理)

b、將目錄設定為本地版本庫
進入目錄中執行命令 git init (會生成隱藏檔案夾.git–>不要操作)

c、在目錄中新建源檔案HelloWord.java
vi HelloWord.java



d、查看git狀態
- 執行命令 git status 【當前紅色】

提示:
- 紅色(作業區有修改 并未添加到暫存區)
- 綠色(作業區的修改 已經添加到暫存區 并未提交到版本庫)
3.nothing to commit, working tree clean(作業區與版本庫一致)
注意:git磁區(作業區、暫存區、本地版本庫、遠程倉庫)
e、將檔案添加到暫存區
git add Hello.java 將指定檔案添加到暫存區
git add . 將目錄所有檔案添加到暫存區
# 將指定檔案添加到暫存區
$ git add HelloWord.java
86151@TJCU MINGW64 /f/gitHelloWord (main)
$ git status
f、查看狀態
執行命令 git status【變為綠色】

g、將檔案提交到本地版本庫
語法:git commit -m “當前版本描述資訊”
例如:
$ git commit -m "新建了一個HelloWord類,包含主函式"

h、修改檔案后,檔案變成紅色的了


i、先添加在commit

h、去除每次add時的警告資訊
git config --global core.autocrlf false

2、版本查看及回退
a、查看版本狀態
git log(多行展示一個版本)

git log --pretty=oneline(一行展示一個版本)

b、版本回退
- 回退n個版本
git reset --hard HEAD^ 回退上一個版本
git reset --hard HEAD^^ 回退上N個版本 幾個^^表示回退幾個版本

- 回退指定版本
git reset --hard commit_id
git reset --hard d6d7s7

- 回退未來版本
使用命令 查看所有歷史命令git reflog

c、暫存區和作業區操作撤銷
- sataged翻譯:階段 restore:恢復
- 撤銷暫存區操作:
git restore --staged HelloWord.java

- 撤銷作業區操作:
git restore HelloWord.java

- 注意:提交到版本庫后不支持撤銷,可以使用版本回退
3、Git磁區原理

作業區(Working Directory)
就是你在電腦里能看到的目錄,比如我的Git-repository檔案夾就是一個作業區:
版本庫(Repository)
作業區有一個隱藏目錄.git,這個不算作業區,而是Git的版本庫,


Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支
master,以及指向master的一個指標叫HEAD,

- 我們把檔案往Git版本庫里添加的時候,是分兩步執行的:
第一步是用git add把檔案添加進去,實際上就是把檔案修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支,
因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改,
你可以簡單理解為,需要提交的檔案修改通通放到暫存區,然后,一次性提交暫存區的所有修改,
4、洗掉檔案
a、洗掉沒用檔案(將作業區檔案洗掉)
- 直接洗掉
- 使用命令洗掉 rm -f 檔案

- 可以回退洗掉

b、確認洗掉 (將作業區洗掉的操作提交到暫存區)
git add/rm 檔案
c、確認提交到版本庫
git commit -m “提示資訊”

5、分支管理
分支就是科幻電影里面的平行宇宙,當你正在電腦前努力學習Git的時候,另一個你正在另一個平行宇宙里努力學習SVN,
如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響,不過,在某個時間點,兩個平行宇宙合并了,結果,你既學會了Git又學會了SVN!
a、作用:
- 用于管理個人代碼,在所有人確認無誤后匯總合并分支,平時在操作時分支之間互不干擾
- master(主分支)

b、創建分支
git branch dev

c、查看分支
git branch

d、切換分支
git checkout dev

e、創建并切換分支
git checkout -b dev

f、合并分支
git checkout master 切換到最終合并的分支上
git merge dev 將merge后指定分支的修改合并到當前分支上
g、洗掉分支
git branch -d dev 【注意:不能自己刪自己】
五、遠程版本庫配置使用

1、遠程版本庫(遠程代碼托管平臺)選取碼云(Gitee)
[ https://www.zhihu.com/question/387515137 了解代碼托管平臺 ]
- 全球最流行的代碼托管平臺:GitHub
GitHub是全球最流行的面向開源及私有軟體專案的托管平臺,有超過2600萬的用戶群體,隨著越來越多的應用程式轉移到了云上,GitHub已經成為了管理軟體開發以及發現已有代碼的首選方法,GitHub可以托管各種git庫,并提供一個web界面,與其它代碼托管平臺不同的是GitHub的“分支”結構可以很容易地將某個專案的成功經驗應用到另外與一個專案中,此外,GitHub還提供了針對企業私有云服務的GitHub企業版,
- 開源中國旗下的代碼托管平臺:碼云
碼云是開源中國社區團隊推出的基于Git的快速的、免費的、穩定的在線代碼托管平臺,專為開發者提供的云端軟體開發協作平臺,無論是個人、團隊、或是企業,都能夠用碼云實作代碼托管、專案管理、協作開發,

- 基于git的倉庫管理程式:GitLab
GitLab是一個利用 Ruby on Rails 開發的開源應用程式,實作一個自托管的Git專案倉庫,可通過Web界面進行訪問公開的或者私人專案安裝, 擁有與GitHub類似的功能,能夠瀏覽源代碼,管理缺陷和注釋,可以管理團隊對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個檔案歷史庫, 團隊成員可以利用內置的簡單聊天程式(Wall)進行交流,它還提供一個代碼片段收集功能可以輕松實作代碼復用,便于日后有需要的時候進行查找,
2、注冊gitee賬號
自己在官網創建一個,要想使用碼云的相關服務,需要注冊賬號(地址: https://gitee.com/signup )
3、新建倉庫
首頁–>倉庫–> + [右上角] --> 新建倉庫
填充倉庫名稱 和 簡介 --> 選擇開源
初始化倉庫[測驗隨便選] java | jetBrains | OBSD
設定模板[測驗隨便選] 全部勾選
選擇創建

- [許可證說明 http://www.ruanyifeng.com/blog/2017/10/open-source-license-tutorial.html]
開源許可證是一種法律許可,通過它,著作權擁有人明確允許,用戶可以免費地使用、修改、共享著作權軟體,
著作權法默認禁止共享,也就是說,沒有許可證的軟體,就等同于保留著作權,雖然開源了,用戶只能看看原始碼,不能用,一用就會侵犯著作權,所以軟體開源的話,必須明確地授予用戶開源許可證,

- 每個Git遠程倉庫都會對應一個網路地址,可以點擊克隆/下載按鈕彈出視窗并點擊復制按鈕獲得這個網路地址

4、邀請其他用戶成為倉庫成員
前面已經在碼云上創建了自己的遠程倉庫,目前倉庫成員只有自己一個人(身份為管理員),在企業實際開發中,一個專案往往是由多個人共同開發完成的,為了使多個參與者都有權限操作遠程倉庫,就需要邀請其他專案參與者成為當前倉庫的成員,

我們當前創建的Git遠程倉庫對應的地址為:https://gitee.com/wanghengjie563135/EMS.git
6、將遠程版本庫拉取到本地(在本地庫和遠程倉庫建立聯系)
a、倉庫右上角克隆/下載位置復制倉庫路徑 HTTPS 或 SSH
- Git遠程倉庫對應的SSH地址為:
git@gitee.com:wanghengjie563135/git-test.git

b、本地新建目錄
c、在目錄中開啟bash視窗執行克隆命令
語法:git clone 倉庫路徑
例如:git clone ``[git@gitee.com](mailto:git@gitee.com)``:wanghengjie563135/EMS.git

d、執行后提示是否確認 輸入yes
e、拉取失敗【沒有權限】
提示:Please make sure you have the correct access rights and the repository exists.
[請確保您擁有正確的訪問權限并且存盤庫存在]
f、設定gitee訪問權限——生成ssh key
a、檢查是否存在.ssh目錄
位置:當前計算機用戶主目錄下 C:\Users\Administrator.ssh
b、檢查.ssh目錄中是否存在 id_rsa.pub 和 id_rsa 檔案 【計算機遠程訪問公/私鑰檔案】
存在跳過,不存在生成對應檔案
c、生成id_rsa.pub 和 id_rsa檔案命令
ssh-keygen -t rsa 后續一直enter確認

- 查看自己的公鑰:
cat ~/.ssh/id_rsa.pub

g、設定gitee訪問權限——配置公鑰
a、點擊gitee右上角個人設定–>選擇設定–>左側導航欄選擇 SSH公鑰
b、標題隨意 --> 公鑰 [打開剛才生成的C:\Users\Administrator/.ssh/id_rsa.pub檔案復制粘貼]–>輸入登錄密碼

h、再次執行命令拉取遠程版本庫
git clone ``[git@gitee.com](mailto:git@gitee.com)``:wanghengjie563135/EMS.git


7、使用遠程版本庫
a、進入到對應庫中
b、新建HelloWord檔案

c、推送至遠程版本庫
git push -u origin master [ -u:分支關聯 origin:遠程庫的名字 master:本地分支名字]
d、將遠程修改同步到本地
git pull origin master
8、將本地專案推送至遠程版本庫
a、在本地準備專案

b、在遠程倉庫中定義倉庫(空倉庫)
選擇新建倉庫–>填充倉庫名稱–>填充介紹–>選擇開源–>選擇創建

c、依次執行命令
git init#初始化倉庫git add .#將專案的所有內容添加到暫存區git commit -m "first commit"#提交到本地版本庫git remote add origin ``[git@gitee.com](mailto:git@gitee.com)``:wanghengjie563135/vue.git#當前倉庫與遠程倉庫建立一個鏈接

git push -u origin master#推送本地庫專案至遠程倉庫

- 推送成功

d、相關報錯總結
- 報錯原因:們在創建倉庫的時候,都會勾選“使用Reamdme檔案初始化這個倉庫”這個操作初識了一個README檔案并配置添加了忽略檔案,當點擊創建倉庫時

它會幫我們做一次初始提交,于是我們的倉庫就有了README.m和.gitignore檔案,然后我們把本地專案關聯到這個倉庫,并把專案推送到倉庫時,我們在關聯本地與遠程時,兩端都是有內容的,但是這兩份內容并沒有聯系,當我們推送到遠程或者從遠程拉取內容時,都會有沒有被跟蹤的內容,于是你看git報的詳細錯誤中總是會讓你先拉取再推送,但是拉取總是失敗,
- 將這些檔案洗掉后再提交

- 相關報錯參考方案:
https://blog.csdn.net/qq_33934427/article/details/109004052
六、Git與IDEA工具集成
1、在IDEA中集成Git
File | Settings | Version Control | Git | 點擊右上角 Test 測驗git環境是否正常 (展示版本號表示正常)

2、修改idea Terminal為 Git bash
File | Settings | Tools | Terminal |
修改 Shell path : git安裝目錄/bin/bash.exe

3、git init 初始化倉庫

4、執行命令設定倉庫
git init #初始化倉庫
git add . #將專案的所有內容添加到暫存區
git commit -m “first commit” #提交到本地版本庫
git remote add origin https://gitee.com/wanghengjie563135/studnet-system.git #當前倉庫與遠程倉庫建立一個鏈接
git push -u origin master #推送本地庫專案至遠程倉庫

- 上傳成功

5、在專案中進行后續開發 注意檔案狀態(顏色)
- 紅色:作業區已修改并未添加到暫存區
- 綠色:修改已經添加到暫存區暫未提交到版本庫
- 黑色|白色:版本庫與作業區一致
- 藍色:該類已經提交到版本庫,有修改 修改之后可以直接commit
6、完成開發后要添加到暫存區、提交本地庫 并且 提交到遠程版本庫

- 添加暫存區 :右擊要提交檔案/檔案夾–>Git–> + Add


- 交本地庫 :右擊要提交檔案/檔案夾–>Git–> Commit File -->輸入提示資訊–>Commit

- 提交遠程庫 :右擊要提交檔案/檔案夾–>Git–> Push --> 選擇Push

7、從遠程版本庫中拉取專案
右擊專案–> Git --> Pull --> 選擇Pull

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-j1DE9INn-1640864886517)(image/image_67.png)]
8、代碼沖突問題
[開發前沒有先Pull拉取代碼,直接修改內容,之前遠程代碼已經進行修改]
- a、此時提交會彈框提示 提供三個解決方案:Cancel(退出) | Merge(合并) | Rebase(退回當前狀態)

- b、選擇Merge
1、代碼無交集 直接pull成功
2、代碼有交集 再次彈框 提供三個解決方案:Accept Yours(使用pull者) | Accept Theirs(使用遠程) | Merge (手動)

3、選擇手動合并 會彈出協同合并操作視圖 整合代碼

4、完成后選擇Apply 提示:使用修改并記錄方案 | 繼續手工修改


9、查看歷史版本 右擊要回退檔案/檔案夾–>Git–>Show History

- 查看歷史版本

10、回退版本
a、右擊要回退檔案/檔案夾–>Git–>Show History -->選擇要回退版本 右擊–> Copy Revision Number

b、選擇當前視窗同行的 Log視窗 --> 選擇要回退版本 右擊 --> Checkout ReVision ‘xxxxxx’

11、添加到暫存區后回退
選擇commit視窗(project下)–>右擊要回退的檔案/目錄–>Rollback

12、根據版本號回退
a、選擇要回退的版本id 右擊要回退檔案/檔案夾–>Git–>Show History -->選擇要回退版本 右擊–> Copy Revision Number
b、右擊要回退檔案/檔案夾–>Git–>Reset HEAD

c、Reset Type 選擇Hard | To Commit 復制版本id
13、查看分支
點擊IDEA右下角黃色感嘆號位置

14、新建分支
點擊IDEA右下角黃色感嘆號位置–>new Branch–> 填寫分支名 -->確認

15、切換分支
點擊IDEA右下角黃色感嘆號位置–>選擇要切換的分支–>點擊右側箭頭–>選擇Checkout

16、洗掉分支/修改分支名字
點擊IDEA右下角黃色感嘆號位置 -->選擇要洗掉/改名的分支 -->Delete/Rename

17、合并分支
a、使用其他分支開發內容
b、合并前切換到主分支
c、選中要合并的分支–>點擊右側箭頭–>Merge into Current

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398678.html
標籤:java
上一篇:【Java資料結構】哈希表詳解
