狂神Git笔记
Git筆記
狂神聊Git
學(xué)習(xí)git之前,我們需要先明白一個概念
版本控制!
1、什么是版本控制
版本控制(Revision control)是一種在開發(fā)的過程中用于管理我們對文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。
- 實(shí)現(xiàn)跨區(qū)域多人協(xié)同開發(fā)
- 追蹤和記載一個或者多個文件的歷史記錄
- 組織和保護(hù)你的源代碼和文檔
- 統(tǒng)計(jì)工作量
- 并行開發(fā)、提高開發(fā)效率
- 跟蹤記錄整個軟件的開發(fā)過程
- 減輕開發(fā)人員的負(fù)擔(dān),節(jié)省時間,同時降低人為錯誤
簡單說就是用于管理多人協(xié)同開發(fā)項(xiàng)目的技術(shù)。
沒有進(jìn)行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發(fā)過程中將會引入很多問題,如軟件代碼的一致性、軟件內(nèi)容的冗余、軟件過程的事物性、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性,以及軟件的整合等問題。
無論是工作還是學(xué)習(xí),或者是自己做筆記,都經(jīng)歷過這樣一個階段!我們就迫切需要一個版本控制工具!
多人開發(fā)就必須要使用版本控制!
2、常見的版本控制工具
我們學(xué)習(xí)的東西,一定是當(dāng)下最流行的!
主流的版本控制器有如下這些:
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
版本控制產(chǎn)品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現(xiàn)在影響力最大且使用最廣泛的是Git與SVN
3、版本控制分類
1、本地版本控制
記錄文件每次的更新,可以對每個版本做一個快照,或是記錄補(bǔ)丁文件,適合個人用,如RCS。
2、集中版本控制 SVN
所有的版本數(shù)據(jù)都保存在服務(wù)器上,協(xié)同開發(fā)者從服務(wù)器上同步更新或上傳自己的修改
所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本,如果不連網(wǎng)的話,用戶就看不到歷史版本,也無法切換版本驗(yàn)證問題,或在不同分支工作。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險這個服務(wù)器會損壞,這樣就會丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。代表產(chǎn)品:SVN、CVS、VSS
3、分布式版本控制 Git
每個人都擁有全部的代碼!安全隱患!
所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網(wǎng)時push到相應(yīng)的服務(wù)器或其他用戶那里。由于每個用戶那里保存的都是所有的版本數(shù)據(jù),只要有一個用戶的設(shè)備沒有問題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲空間的占用。
不會因?yàn)榉?wù)器損壞或者網(wǎng)絡(luò)問題,造成不能工作的情況!
4、Git與SVN的主要區(qū)別
SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的,而工作的時候,用的都是自己的電腦,所以首先要從中央服務(wù)器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,對網(wǎng)絡(luò)帶寬要求較高。
Git是分布式版本控制系統(tǒng),沒有中央服務(wù)器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯(lián)網(wǎng)了,因?yàn)榘姹径荚谧约弘娔X上。協(xié)同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。Git可以直接看到更新了哪些代碼和文件!
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。
聊聊Git的歷史
同生活中的許多偉大事物一樣,Git 誕生于一個極富紛爭大舉創(chuàng)新的年代。
Linux 內(nèi)核開源項(xiàng)目有著為數(shù)眾廣的參與者。絕大多數(shù)的 Linux 內(nèi)核維護(hù)工作都花在了提交補(bǔ)丁和保存歸檔的繁瑣事務(wù)上(1991-2002年間)。到 2002 年,整個項(xiàng)目組開始啟用一個專有的分布式版本控制系統(tǒng) BitKeeper 來管理和維護(hù)代碼。
Linux社區(qū)中存在很多的大佬!破解研究 BitKeeper !
到了 2005 年,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了 Linux 內(nèi)核社區(qū)免費(fèi)使用 BitKeeper 的權(quán)力。這就迫使 Linux 開源社區(qū)(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時的經(jīng)驗(yàn)教訓(xùn),開發(fā)出自己的版本系統(tǒng)。(2周左右!) 也就是后來的 Git!
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。
Git是免費(fèi)、開源的,最初Git是為輔助 Linux 內(nèi)核開發(fā)的,來替代 BitKeeper!
Linux和Git之父李納斯·托沃茲(Linus Benedic Torvalds)1969、芬蘭
Git環(huán)境配置
5、軟件下載
打開 [git官網(wǎng)] https://git-scm.com/,下載git對應(yīng)操作系統(tǒng)的版本。
所有東西下載慢的話就可以去找鏡像!
官網(wǎng)下載太慢,我們可以使用淘寶鏡像下載:http://npm.taobao.org/mirrors/git-for-windows/
先卸載
直接返安裝
查找環(huán)境變量,有就移除
下載對應(yīng)的版本即可安裝!
安裝:無腦下一步即可!安裝完畢就可以使用了!
6、啟動Git
安裝成功后在開始菜單中會有Git項(xiàng),菜單下有3個程序:任意文件夾下右鍵也可以看到對應(yīng)的程序!
**Git Bash:**Unix與Linux風(fēng)格的命令行,使用最多,推薦最多
**Git CMD:**Windows風(fēng)格的命令行
Git GUI:圖形界面的Git,不建議初學(xué)者使用,盡量先熟悉常用命令
7、常用的Linux命令
平時一定要多使用這些基礎(chǔ)的命令!
1)、cd : 改變目錄。
2)、cd . . 回退到上一個目錄,直接cd進(jìn)入默認(rèn)目錄
3)、pwd : 顯示當(dāng)前所在的目錄路徑。
4)、ls(ll): 都是列出當(dāng)前目錄中的所有文件,只不過ll(兩個ll)列出的內(nèi)容更為詳細(xì)。
5)、touch : 新建一個文件 如 touch index.js 就會在當(dāng)前目錄下新建一個index.js文件。
6)、rm: 刪除一個文件, rm index.js 就會把index.js文件刪除。
7)、mkdir: 新建一個目錄,就是新建一個文件夾。
8)、rm -r : 刪除一個文件夾, rm -r src 刪除src目錄
rm -rf / 切勿在Linux中嘗試!刪除電腦中全部文件!9)、mv 移動文件, mv index.html src index.html 是我們要移動的文件, src 是目標(biāo)文件夾,當(dāng)然, 這樣寫,必須保證文件和目標(biāo)文件夾在同一目錄下。
10)、reset 重新初始化終端/清屏。
11)、clear 清屏。
12)、history 查看命令歷史。
13)、help 幫助。
14)、exit 退出。
15)、#表示注釋
8、Git配置
所有的配置文件,其實(shí)都保存在本地!
查看配置 git config -l
查看不同級別的配置文件:
#查看系統(tǒng)config git config --system --list #查看當(dāng)前用戶(global)配置 git config --global --listGit相關(guān)的配置文件:
1)、Git\etc\gitconfig :Git 安裝目錄下的 gitconfig --system 系統(tǒng)級
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-z9qEcYtX-1630978684092)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20210721134903784.png)]
2)、C:\Users\Administrator\ .gitconfig 只適用于當(dāng)前登錄用戶的配置 --global 全局
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-cqMKTdA1-1630978684093)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20210721135128827.png)]
這里可以直接編輯配置文件,通過命令設(shè)置后會響應(yīng)到這里。
9、設(shè)置用戶名與郵箱(用戶標(biāo)識,必要)
當(dāng)你安裝Git后首先要做的事情是設(shè)置你的用戶名稱和e-mail地址。這是非常重要的,因?yàn)槊看蜧it提交都會使用該信息。它被永遠(yuǎn)的嵌入到了你的提交中:
git config --global user.name "hcd" #名稱git config --global user.email 2925284680@qq.com #郵箱只需要做一次這個設(shè)置,如果你傳遞了–global 選項(xiàng),因?yàn)镚it將總是會使用該信息來處理你在系統(tǒng)中所做的一切操作。如果你希望在一個特定的項(xiàng)目中使用不同的名稱或e-mail地址,你可以在該項(xiàng)目中運(yùn)行該命令而不要–global選項(xiàng)。總之–global為全局配置,不加為某個項(xiàng)目的特定配置。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-rxA8Adqr-1630978684094)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20210721135229873.png)]
Git基本理論(重要)
10、三個區(qū)域
Git本地有三個工作區(qū)域:工作目錄(Working Directory)、暫存區(qū)(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠(yuǎn)程的git倉庫(Remote Directory)就可以分為四個工作區(qū)域。文件在這四個區(qū)域之間的轉(zhuǎn)換關(guān)系如下:
- Workspace:工作區(qū),就是你平時存放項(xiàng)目代碼的地方
- Index / Stage:暫存區(qū),用于臨時存放你的改動,事實(shí)上它只是一個文件,保存即將提交到文件列表信息
- Repository:倉庫區(qū)(或本地倉庫),就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉庫的版本
- Remote:遠(yuǎn)程倉庫,托管代碼的服務(wù)器,可以簡單的認(rèn)為是你項(xiàng)目組中的一臺電腦用于遠(yuǎn)程數(shù)據(jù)交換
本地的三個區(qū)域確切的說應(yīng)該是git倉庫中HEAD指向的版本:
- Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。
- WorkSpace:需要通過Git進(jìn)行版本控制的目錄和文件,這些目錄和文件組成了工作空間。
- .git:存放Git管理信息的目錄,初始化倉庫的時候自動創(chuàng)建。
- Index/Stage:暫存區(qū),或者叫待提交更新區(qū),在提交進(jìn)入repo之前,我們可以把所有的更新放在暫存區(qū)。
- Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當(dāng)前的開發(fā)分支(branch)。
- Stash:隱藏,是一個工作狀態(tài)保存棧,用于保存/恢復(fù)WorkSpace中的臨時狀態(tài)。
11、工作流程
git的工作流程一般是這樣的:
1、在工作目錄中添加、修改文件;
2、將需要進(jìn)行版本管理的文件放入暫存區(qū)域;
3、將暫存區(qū)域的文件提交到git倉庫。
因此,git管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)
Git項(xiàng)目搭建
12、創(chuàng)建工作目錄與常用指令
工作目錄(WorkSpace)一般就是你希望Git幫助你管理的文件夾,可以是你項(xiàng)目的目錄,也可以是一個空目錄,建議不要有中文。
日常使用只要記住下圖6個命令:
13、本地倉庫搭建
創(chuàng)建本地倉庫的方法有兩種:一種是創(chuàng)建全新的倉庫,另一種是克隆遠(yuǎn)程倉庫。
1、創(chuàng)建全新的倉庫,需要用GIT管理的項(xiàng)目的根目錄執(zhí)行:
# 在當(dāng)前目錄新建一個Git代碼庫$ git init2、執(zhí)行后可以看到,僅僅在項(xiàng)目目錄多出了一個.git目錄,關(guān)于版本等的所有信息都在這個目錄里面。
14、克隆遠(yuǎn)程倉庫
1、另一種方式是克隆遠(yuǎn)程目錄,由于是將遠(yuǎn)程服務(wù)器上的倉庫完全鏡像一份至本地!
# 克隆一個項(xiàng)目和它的整個代碼歷史(版本信息)$ git clone [url] $ git clone https://gitee.com/kuangstudy/kuang_livenote.git2、去 gitee 或者 github 上克隆一個測試!
Git文件操作
15、文件的四種狀態(tài)
版本控制就是對文件的版本控制,要對文件進(jìn)行修改、提交等操作,首先要知道文件當(dāng)前在什么狀態(tài),不然可能會提交了現(xiàn)在還不想提交
的文件,或者要提交的文件沒提交上。
- Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add狀態(tài)變?yōu)镾taged.
- Unmodify: 文件已經(jīng)入庫, 未修改, 即版本庫中的文件快照內(nèi)容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變?yōu)镸odified. 如果使用git rm移出版本庫, 則成為Untracked文件
- Modified: 文件已修改, 僅僅是修改, 并沒有進(jìn)行其他的操作. 這個文件也有兩個去處, 通過git add可進(jìn)入暫存staged狀態(tài), 使用git checkout 則丟棄修改過, 返回到unmodify狀態(tài), 這個git checkout即從庫中取出文件, 覆蓋當(dāng)前修改 !
- Staged: 暫存狀態(tài). 執(zhí)行g(shù)it commit則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify狀態(tài). 執(zhí)行g(shù)it reset HEAD filename取消暫存, 文件狀態(tài)為Modified
16、查看文件狀態(tài)
上面說文件有4種狀態(tài),通過如下命令可以查看到文件的狀態(tài):
#查看指定文件狀態(tài) git status [filename]#查看所有文件狀態(tài) git status# git add . 添加所有文件到暫存區(qū)# git commit -m "消息內(nèi)容" 提交暫存區(qū)中的內(nèi)容到本地倉庫 -m 提交信息17、忽略文件
有些時候我們不想把某些文件納入版本控制中,比如數(shù)據(jù)庫文件,臨時文件,設(shè)計(jì)文件等
在主目錄下建立".gitignore"文件,此文件有如下規(guī)則:
18、使用碼云(Gitee)
github 是有墻的,比較慢,在國內(nèi)的話,我們一般使用 gitee ,公司中有時候會搭建自己的gitlab服務(wù)器
這個其實(shí)可以作為大家未來找工作的一個重要信息!
1、注冊登錄碼云,完善個人信息
2、設(shè)置本機(jī)綁定SSH公鑰,實(shí)現(xiàn)免密碼登錄!(免密碼登錄,這一步挺重要的,碼云是遠(yuǎn)程倉庫,我們是平時工作在本地倉庫!)
# 進(jìn)入 C:\Users\Administrator\.ssh 目錄 # 生成公鑰 ssh-keygen3、將公鑰信息public key 添加到碼云賬戶中即可!
4、使用碼云創(chuàng)建一個自己的倉庫!
許可證:開源是否可以隨意轉(zhuǎn)載,開源但是不能商業(yè)使用,不能轉(zhuǎn)載,… 限制!
克隆到本地!
19、IDEA中集成Git
1、新建項(xiàng)目,綁定git。
注意觀察idea中的變化
2、修改文件,使用IDEA操作git。
- 添加到暫存區(qū)
- commit 提交
- push到遠(yuǎn)程倉庫
3、提交測試
這些都是單個人的操作!
學(xué)習(xí)的方式最重要!學(xué)會學(xué)習(xí)!我上課的更多時候都是在教大家去學(xué)習(xí)一種理念和思想(學(xué)習(xí)方式)
有道無術(shù)、術(shù)尚可求。有術(shù)無道、止于術(shù)!
真正的教學(xué),授人以漁!
20、說明:GIT分支
分支在GIT中相對較難,分支就是科幻電影里面的平行宇宙,如果兩個平行宇宙互不干擾,那對現(xiàn)在的你也沒啥影響。不過,在某個時間點(diǎn),兩個平行宇宙合并了,我們就需要處理一些問題了!
git分支中常用指令:
# 列出所有本地分支 git branch# 列出所有遠(yuǎn)程分支 git branch -r# 新建一個分支,但依然停留在當(dāng)前分支 git branch [branch-name]# 新建一個分支,并切換到該分支 git checkout -b [branch]# 合并指定分支到當(dāng)前分支 $ git merge [branch]# 刪除分支 $ git branch -d [branch-name] # 刪除遠(yuǎn)程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]IDEA中操作
如果同一個文件在合并分支時都被修改了則會引起沖突:解決的辦法是我們可以修改沖突文件后重新提交!選擇要保留他的代碼還是你的代碼!
master主分支應(yīng)該非常穩(wěn)定,用來發(fā)布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完后,比如上要發(fā)布,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來。
作業(yè)練習(xí):找一個小伙伴,一起搭建一個遠(yuǎn)程倉庫,來練習(xí)Git!
1、不要把Git想的很難,工作中多練習(xí)使用就自然而然的會了!
2、Git的學(xué)習(xí)也十分多,看完我的Git教程之后,可以多去思考,總結(jié)到自己博客!
團(tuán)隊(duì)很重要!
刪除分支
$ git branch -d [branch-name]
刪除遠(yuǎn)程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
總結(jié)
- 上一篇: Microsoft Office 201
- 下一篇: Ubuntu 下 图形化磁盘管理工具