柚子快報邀請碼778899分享:Java全棧課程之Git詳解
柚子快報邀請碼778899分享:Java全棧課程之Git詳解
一、版本控制
??????? 1.什么是版本控制
????????版本控制(Revision control)是一種在開發(fā)的過程中用于管理我們對文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。
????????????????實現(xiàn)跨區(qū)域多人協(xié)同開發(fā)
????????????????追蹤和記載一個或者多個文件的歷史記錄
????????????????組織和保護你的源代碼和文檔
????????????????統(tǒng)計工作量
????????????????并行開發(fā)、提高開發(fā)效率
????????????????跟蹤記錄整個軟件的開發(fā)過程
????????????????減輕開發(fā)人員的負擔(dān),節(jié)省時間,同時降低人為錯誤
????????簡單說就是用于管理多人協(xié)同開發(fā)項目的技術(shù)。
????????沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發(fā)過程中將會引入很多問題,如軟件代碼的一致性、軟件內(nèi)容的冗余、軟件過程的事物性、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性,以及軟件的整合等問題。
??????? 2.常見的版本控制工具
??????? 主流的版本控制器有如下這些
????????????????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)本地版本控制
??????? 記錄文件每次更新,可以對每個版本做一個快照,或是記錄補丁文件,適合個人用,如RCS。
??????????????? (2)集中版本控制
??????? 所有的版本數(shù)據(jù)都保存在服務(wù)器上,協(xié)同開發(fā)者從服務(wù)器上同步更新或上傳自己的修改
????????所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本,如果不連網(wǎng)的話,用戶就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險這個服務(wù)器會損壞,這樣就會丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。代表產(chǎn)品:SVN、CVS、VSS
??????????????? (3)分布式版本控制
????????所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網(wǎng)時push到相應(yīng)的服務(wù)器或其他用戶那里。由于每個用戶那里保存的都是所有的版本數(shù)據(jù),只要有一個用戶的設(shè)備沒有問題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲空間的占用。
??????? 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)了,因為版本都在自己電腦上。協(xié)同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修 改推送給對方,就可以互相看到對方的修改了。?
????????Git是目前世界上最先進的分布式版本控制系統(tǒng)。
二、聊聊Git歷史
????????同生活中的許多偉大事物一樣,Git誕生于一個極富紛爭大舉創(chuàng)新的年代。
????????Linux 內(nèi)核開源項目有著為數(shù)眾廣的參與者。絕大多數(shù)的Linux內(nèi)核維護工作都花在了提交補丁和保存歸檔的繁瑣事務(wù)上(1991-2002年間)。到2002年,整個項目組開始啟用一個專有的分布式版本控制系統(tǒng)BitKeeper來管理和維護代碼。
????????到了2005年,開發(fā)BitKeeper的商業(yè)公司同Linux內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了Linux內(nèi)核社區(qū)免費使用 ??????? BitKeeper的權(quán)力。這就迫使Linux開源社區(qū)(特別是Linux的締造者Linus Torvalds)基于使用BitKeeper時的經(jīng)驗教訓(xùn),開發(fā)出
??????? 自己的版本系統(tǒng)。也就是后來的Git!
????????Git是目前世界上最先進的分布式版本控制系統(tǒng)。
????????Git是免費、開源的,最初Git是為輔助Linux內(nèi)核開發(fā)的,來替代BitKeeper!
三、Git環(huán)境配置
??????? 1.軟件下載
????????打開git Git 官網(wǎng),下載git對應(yīng)操作系統(tǒng)的版本
??????? 官網(wǎng)下載太慢,我們可以使用淘寶鏡像下載CNPM Binaries Mirror
??????? 2.啟動Git
安裝成功后在開始菜單中會有Git項,菜單下有3個程序:任意文件夾下右鍵也可以看到對應(yīng)的程序
Git Bash:Unix與Linux風(fēng)格的命令行,使用最多,推薦最多
Git CMD:Windows風(fēng)格的命令行
Git GUI:圖形界面的Git,不建議初學(xué)者使用,盡量先熟悉常用命令
??????? 3.基本的Linux命令學(xué)習(xí)
??????????????? (1)cd:改變目錄。 ????????????????(2)cd .. 回退到上一個目錄,直接cd進入默認目錄 ????????????????(3)pwd:顯示當(dāng)前所在的目錄路徑。 ????????????????(4)Is(ll):都是列出當(dāng)前目錄中的所有文件,只不過(兩個)列出的內(nèi)容更為詳細。 ????????????????(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目錄 ????????????????(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)#表示注釋
??????? 4.Git配置
??????? (1)查看配置
git config -l
??????? (2)查看系統(tǒng)配置
git config --system --list
???????? (3)查看本地配置
git config --global --list
Git相關(guān)的配置文件:
(1)Git\mingw64\etc\gitconfig :Git安裝目錄下的gitconfig -- system系統(tǒng)級
(2)C:\Users\Administrator\.gitconfig 只適用于當(dāng)前登錄用戶的配置 -- global全局
這里可以直接編輯配置文件,通過命令設(shè)置后會響應(yīng)到這里。
??????? 5.設(shè)置用戶名與郵箱(用戶標(biāo)識,必要)
????????當(dāng)你安裝Git后首先要做的事情是設(shè)置你的用戶名稱和e-mail地址。這是非常重要的,因為每次Git提交都會使用該信息。它被永遠的嵌入到了你的提交中:
git config -- global user.name "孫昊楠" #名稱
git config -- global user.email 1847147914@qq.com #郵箱
四、Git基本理論
??????? 1.工作區(qū)域
????????Git本地有三個工作區(qū)域:工作目錄(Working Directory)、暫存區(qū)(Stage/lndex)、資源庫(Repository或Git Directory)。如果在加上遠程的git倉庫(Remote Directory)就可以分為四個工作區(qū)域。文件在這四個區(qū)域之間的轉(zhuǎn)換關(guān)系如下:
· Workspace:工作區(qū),就是你平時存放項目代碼的地方
· Index/Stage:暫存區(qū),用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息
· Repository:倉庫區(qū)(或本地倉庫),就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉庫的版本
· Remote:遠程倉庫,托管代碼的服務(wù)器,可以簡單的認為是你項目組中的一臺電腦用于遠程數(shù)據(jù)交換本地的三個區(qū)域確切的說應(yīng)該是git倉庫中HEAD指向的版本:
· Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。 ·WorkSpace:需要通過Git進行版本控制的目錄和文件,這些目錄和文件組成了工作空間。
·. git:存放Git管理信息的目錄,初始化倉庫的時候自動創(chuàng)建。 · Index/Stage:暫存區(qū),或者叫待提交更新區(qū),在提交進入repo之前,我們可以把所有的更新放在暫存區(qū)。 · Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當(dāng)前的開發(fā)分支(branch)。 · Stash:隱藏,是一個工作狀態(tài)保存棧,用于保存/恢復(fù)WorkSpace中的臨時狀態(tài)。
???????? 2.工作流程
git的工作流程一般是這樣的:
1、在工作目錄中添加、修改文件;
2、將需要進行版本管理的文件放入暫存區(qū)域;
3、將暫存區(qū)域的文件提交到git倉庫。
因此,git管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)
五、Git項目搭建
??????? 1.創(chuàng)建工作目錄與常用指令
????????工作目錄(WorkSpace)一般就是你希望Git幫助你管理的文件夾,可以是你項目的目錄,也可以是一個空目錄,建議不要有中文。
日常使用只要記住下圖6個命令:
??????? 2.本地倉庫搭建
創(chuàng)建本地倉庫的方法有兩種:一種是創(chuàng)建全新的倉庫,另一種是克隆遠程倉庫。
??????????????? (1)創(chuàng)建全新的倉庫,需要用GIT管理的項目的根目錄執(zhí)行:
# 在當(dāng)前目錄新建一個Git代碼庫
$ git init
??????????????? (2)執(zhí)行后可以看到,僅僅在項目目錄多出了一個.git目錄,關(guān)于版本等的所有信息都在這個目錄里面。?
??????? 3.克隆遠程倉庫
??????? ????????(1)另一種方式是克隆遠程目錄,由于是將遠程服務(wù)器上的倉庫完全鏡像一份至本地
# 克隆一個項目和它的整個代碼歷史(版本信息)
$ git clone [url]
??????????????? (2)去gitee或者github上克隆一個測試!?
六、Git文件操作
??????? 1.文件4中狀態(tài)
????????版本控制就是對文件的版本控制,要對文件進行修改、提交等操作,首先要知道文件當(dāng)前在什么狀態(tài),不然可能會提交了現(xiàn)在還不想提交的文件,或者要提交的文件沒提交上。
· Untracked:未跟蹤,此文件在文件夾中,但并沒有加入到git庫,不參與版本控制.通過git add狀態(tài)變?yōu)镾taged
· Unmodify:文件已經(jīng)入庫,未修改,即版本庫中的文件快照內(nèi)容與文件夾中完全一致.這種類型的文件有兩種去處,如果它被修改,而變?yōu)?Modified如果使用git rm 移出版本庫,則成為Untracked 文件
· Modified:文件已修改,僅僅是修改,并沒有進行其他的操作.這個文件也有兩個去處,通過 git add 可進入暫存staged 狀態(tài),使用git checkout則丟棄修改過,返回到unmodify狀態(tài),這個git checkout 即從庫中取出文件,覆蓋當(dāng)前修改!
· Staged:暫存狀態(tài).執(zhí)行 git commit 則將修改同步到庫中,這時庫中的文件和本地文件又變?yōu)橐恢?文件為Unmodify狀態(tài)執(zhí)行g(shù)it reset HEAD filename取消暫存,文件狀態(tài)為Modified
??????? 2.查看文件狀態(tài)
????????上面說文件有4種狀態(tài),通過如下命令可以查看到文件的狀態(tài):
#查看指定文件狀態(tài)
git status [filename]
#查看所有文件狀態(tài)
git status
??????? 3.忽略文件
有些時候我們不想把某些文件納入版本控制中,比如數(shù)據(jù)庫文件,臨時文件,設(shè)計文件等
在主目錄下建立".gitignore"文件,此文件有如下規(guī)則:
????????(1)忽略文件中的空行或以井號(#)開始的行將會被忽略。
????????(2)可以使用Linux通配符。例如:星號(*)代表任意多個字符,問號(?)代表一個字符,方括號([abc])代表可選字符范圍,大括號({string1,string2, ... })代表可選的字符串等。
????????(3)如果名稱的最前面有一個感嘆號(!),表示例外規(guī)則,將不被忽略。
????????(4)如果名稱的最前面是一個路徑分隔符(/),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
??????? (5)如果名稱的最后面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認文件或目錄都忽略)。
#為注釋
*. txt #忽略所有 .txt結(jié)尾的文件
!lib.txt #但lib.txt除外
/temp #僅忽略項目根目錄下的TODO文件,不包括其它目錄temp
build/ #忽略build/目錄下的所有文件
doc/ *. txt #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
七、使用碼云
????????1、注冊登錄碼云,完善個人信息
????????2、設(shè)置本機綁定SSH公鑰,實現(xiàn)免密碼登錄
# 進入 C:\Users\Administrator\.ssh 目錄
# 生成公鑰
ssh-keygen
?
????????3、將公鑰信息public key 添加到碼云賬戶中
????????4、使用碼云創(chuàng)建一個自己的倉庫
八、IDEA中集成Git
??????? 1.新建項目,綁定git
??????????????? 新建一個項目后,把之前在碼云上拷貝下來的項目文件復(fù)制到新創(chuàng)建的文件中
??????? 2.修改文件,使用IDEA操作git
??????? 3.提交測試
九、說明:Git分支
git分支中常用指令
# 列出所有本地分支
git branch
# 列出所有遠程分支
git branch -r
# 新建一個分支,但依然停留在當(dāng)前分支
git branch [branch-name]
# 新建一個分支,并切換到該分支
git checkout -b [branch]
# 合并指定分支到當(dāng)前分支
$ git merge [branch]
# 刪除分支
$ git branch -d [branch-name]
# 刪除遠程分支
$ git push origin -- delete [branch-name]
$ git branch -dr [remote/branch]
如果同一個文件在合并分支時都被修改了則會引起沖突:解決的辦法是我們可以修改沖突文件后重新提交!
master主分支應(yīng)該非常穩(wěn)定,用來發(fā)布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完后,比如上要發(fā)布,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來。
柚子快報邀請碼778899分享:Java全棧課程之Git詳解
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。