文章目錄
- 版本控制工具
-
- 概念
- 作用
- 常見工具
- Git
-
- 簡介
- Git準備工作
-
- 建立.git目錄
- 設定簽名
- 版本管理
-
- 檔案版本控制方式
- 檔案版本基礎管理
- 版本前進後退管理
- 删除檔案并找回方式
- 比較檔案的方式
- 分支管理
-
- 什麼是分支管理?
- 好處
- 操作方式
- 分支合并以及解決沖突
- Git注意事項
-
- 1. 保持原子性的送出
- 2. 對送出的資訊采用明晰的标注
- GitHub
-
- 概述
- GitHub網站應用
-
- 1. 建立遠端庫
- 邀請其他GitHub使用者加入開發團隊
- GitHub注意事項
-
- 1. 推送之前先拉取
- 2. 不要推送不能通過編譯的代碼
- 3. 不要推送自己不明白的代碼
- 4. 提前協調好項目組成員的工作計劃
- idea使用Git&GitHub
-
- 基本配置
- 将IDEA項目push(推送)到GitHub
- GitHub遠端庫clone項目到IDEA
版本控制工具
概念
版本控制工具提供完備的版本管理功能,用于存儲、追蹤目錄(檔案夾)和檔案的修改曆史,是軟體開發者的必備工具,是軟體公司的基礎設施。
版本控制最主要的功能就是追蹤檔案的變更。它将什麼時候、什麼人更改了檔案的什麼内容等資訊忠實地了已錄下來。軟體開發往往是多人協同作業,版本控制可以有效地解決版本的同步以及不同開發者之間的開發通信問題,提高協同開發的效率
作用
(1)協同開發
團隊協作共同完成同一個項目
(2)版本管理
以不斷提升項目版本的方式逐漸完成項目。
(3)資料備份
開發中以版本控制的形式儲存每一個曆史版本。
(4)權限控制
對團隊開發人員進行不同的權限配置設定。
(5)分支管理
允許開發團隊在工作過程中多條生産線同時推進任務,進一步提高效率。
常見工具
集中式版本控制工具
CVS、SVN、VSS……
不同的用戶端直接跟伺服器端互動工作,可以進行送出操作、克隆操作等。不同用戶端之間是互相獨立的
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
每個使用者都有自己在本地的倉庫,用來管理版本控制,每個用戶端也同時是一個伺服器。同時也可以用一個專門的伺服器的倉庫用來管理
Git
簡介
Git是一個開源的分布式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理
官網位址:https://git-scm.com/
Git的優點
(1)适合分布式開發,強調個體。
(2)公共伺服器壓力和資料量都不會太大。
(3)速度快、靈活。
(4)相對容易的解決沖突。
(5)大部分操作在本地完成,不需要聯網。
(6)以快照流的方式工作
用戶端下載下傳位址:https://git-scm.com/downloads
windows安裝,輕按兩下安裝程式,一直next即可
檢視是否安裝成功:
git --version
Git準備工作
建立.git目錄
首先找到一個任意的路徑當做本地庫目錄
例如:目錄D:\GitTest
點選右鍵 --> Git Bash Here

初始化本地庫
指令:git init
執行完該指令後,在目前目錄會出現 檔案夾 .git 。(這個檔案夾是隐藏檔案夾)
.git目錄的出現表示本地庫初始化成功(表示這個.git目錄就是我們的本地庫了)
注意:.git目錄存放的是和本地庫相關的檔案,不要修改或者删除
Git目錄說明
工作目錄:任意目錄下,我們開發代碼的目錄
暫存區域:.git目錄下,作用:有個後悔(傳回撤銷)的餘地
本地倉庫:.git目錄下,Git存儲項目的倉庫
設定簽名
-
設定簽名的作用:區分不同開發人員的身份
注意:為Git設定簽名與遠端庫(代碼托管中心)的賬号密碼沒有任何關系
- 設定簽名指令:
-
本地庫級别設定簽名方式:
git config user.name zs
git config user.email [email protected]
資訊儲存位置:./.git/config 檔案
-
系統使用者級别設定簽名方式:
git config --global user.name zs
git config --global user.email [email protected]
-
可以在.git檔案夾下檢視配置檔案config或者~/.gitconfig 檔案 ,看是否設定成功,成功如下圖:
優先級按照就近原則:項目級别優先于系統使用者級别,二者都有時采用項目級别的簽名。
版本管理
檔案版本控制方式
将工作目錄的代碼先送出到暫存區(add),再有暫存區存到本地庫(commit),最後從本地庫推送到遠端庫上(push)
檔案版本基礎管理
git status:檢視工作區、暫存區狀态
檔案辨別紅色表示檔案還沒有被添加到Git中進行管理
git add [file name]:将工作區的資訊(變化)添加到暫存區,檔案變成綠色表示
git commit -m “msg” [file name]:将暫存區的内容送出到本地庫
如果出現下面的錯誤,原因就是 指令 git 前有空格,删掉就好了
本地庫與暫存庫檔案内容一緻,這時将暫存庫中的檔案内容修改
原檔案内容
修改檔案内容
檢視狀态,檔案又變紅了,說明工作區有新内容,待添加到暫存區
重複首次操作,繼續add,然後繼續commit
最後檢視狀态,確定工作區,暫存區,本地庫再次同步。
git log:檢視本地庫更新曆史記錄
我們可以觀察到兩次送出,分别對應兩個40位的哈希值,這就是我們送出後記錄的版本号
git log --oneline:檢視本地庫更新曆史記錄(簡化版)
git reflog:檢視本地庫更新曆史記錄(展現HEAD指針)
版本前進後退管理
新增曆史記錄ccc、ddd、eee、fff、ggg
可以使用git commit -am"msg"進行添加和送出一次性操作
準備工作後,開始前進和後退的操作
git reset --hard [局部索引值]:基于索引值的操作
在看檔案内容,回到添加eee時的狀态,回到曆史版本
回到最新版本
再檢視檔案,回到添加ggg時的狀态
觀察到前進和回退的操作也會被忠實的記錄下來
git reset --hard HEAD^ :表示後退操作
一個 ^ 表示後退一步,N個^表示後退N步
觀察以上操作,我們通過後退的方式,後退到了fff
源檔案變成
删除檔案并找回方式
前提:删除前,檔案存在時的狀态送出到了本地庫
通過以上方式檢視狀态,表示工作區、暫存區和本地庫處于同步狀态。
删除檔案test01.txt
檢視檔案夾狀态
通過以上觀察,表示工作區中少了檔案,和本地庫不同步了
此時根據提示,我們可以将這次的删除操作添加到暫存區,并送出的本地庫。
注意:删除檔案後的git操作,和添加檔案後的git操作方式是一緻的,也是先add,再commit
我們現在相當于徹底将這個檔案删除了,最新送出到本地庫的曆史也是處于将這個檔案删除的狀态了。
現在我們要将該檔案找回!
由于我們以前送出過的每一個曆史版本都被忠實的記錄下來的,是以我們現在回到曆史就可以将檔案找回了。(檔案是被删除了,但是曆史永遠不會被删除)
檢視曆史版本
通過我們以上學習過的 git reset --hard [版本号] 就可以實作了
檔案夾GitTest找回檔案
比較檔案的方式
git diff 檔案名 : 将工作區中的檔案和暫存區進行比較
測試前,首先確定工作區,暫存區,本地庫處于同步狀态
觀察目前最新版本(例如以下最新版本為ggg)
修改工作區檔案添加了hhh
接下來比較工作區中的該檔案和暫存區的差别
通過觀察,看出工作區比暫存區多了hhh
還可以與本地庫的曆史版本進行比較
git diff 本地庫中曆史版本 檔案名
分支管理
什麼是分支管理?
在版本控制過程中,使用多條線同時推進多個任務就是分支管理
好處
- 同時并行推進多個功能開發,提高開發效率
-
各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任
何影響。失敗的分支删除重新開始即可。
操作方式
git brach -v 檢視分支
git branch 分支名 建立分支
建立完畢後,再次檢視分支,表示現在共有兩個分支master和branch1
注意:由于branch1這個分支是由master這個分支建立出來的,是以預設指向同一個指針ggg,即分支的起點也是ggg
master綠色高亮表示目前操作,使用的仍然是master分支
git checkout 分支名 切換分支
切換完再次檢視分支,branch1分支綠色高亮顯示,表示我們現在操作的是branch1這個分支
分支合并以及解決沖突
-
合并分支
首先我們切換到branch1分支上,在test1.txt上新增資訊iii,然後add和commit在branch1分支上,我們看到了iii如果切換回master分支上,我們是看不到iii的(iii是branch1做的操作,是以看不到)
此時master分支如果想要看到iii,就必須要和bran1分支進行合并分支的合并不會删除某一個分支,而是對于資訊進行對稱整合
我們切換到master分支上
執行指令 git merge branch1就會将branch1中的資訊進行整合
Git 和 GitHub版本控制工具GitGitHubidea使用Git&GitHub -
合并分支過程中沖突的解決方式
此時master分支和branch1分支上都是最新的iii
在master分支上新增jjj,執行add和commit
然後切換到branch1分支上,新增kkk,執行add和commit
然後合并分支,例如我們還是使用master合并branch1分支
此時就會産生沖突
Git 和 GitHub版本控制工具GitGitHubidea使用Git&GitHub 沖突的解決方式:
首先編輯test01.txt檔案,保留有用資訊(協商解決),删除(作為沖突辨別的)特殊符号
執行git add test01.txt
執行 git commit -m"日志資訊"
成功的解決了沖突Git 和 GitHub版本控制工具GitGitHubidea使用Git&GitHub
Git注意事項
1. 保持原子性的送出
每次送出的間歇盡可能地短,以幾個小時的開發工作為宜。例如在更改 UI 界面的時候,可以每完成一個 UI 界面的修改或者設計,就送出一次。在開發功能子產品的時候,可以每完成一個小細節功能的測試,就送出一次,在修改 bug 的時候,每修改掉一個 bug 并且确認修改了這個 bug,也就送出一次。我們提倡多送出,也就能多為代碼添加上保險。
2. 對送出的資訊采用明晰的标注
不論是在本機中使用本地庫,還是未來推送到遠端庫,如果送出不明确的标注不僅僅會讓自己懷疑當初送出的目的,也會讓項目組中其他的成員感到很無奈,項目經理無法很清晰的掌握工作進度,無法清晰的把握此次送出的概要資訊。在有必要的情況下也不能明确的的回到指定的曆史記錄。是以,在做送出工作時,要填寫明晰的标注,能夠概要的描述所送出檔案的資訊,讓項目組其他成員在看到标注後不用詳細看代碼就能了解你所做的更新。
GitHub
概述
GitHub是一個面向開源及私有軟體項目的托管平台,因為隻支援Git 作為唯一的版本庫格式進行托管,故名GitHub
團隊協作開發方式
GitHub官網
GitHub網站應用
1. 建立遠端庫
看到以下遠端庫資訊頁面證明遠端庫已經建立成功
如果是剛登入進來,歡迎頁面的左側也會看到遠端庫的菜單項
點選左側菜單中的遠端庫,也會進入到該遠端庫資訊頁面
觀察如下詳細資訊頁面
點選HTTP,會得到通路遠端庫的位址
可以搜尋到别人建立的遠端庫
邀請其他GitHub使用者加入開發團隊
打開遠端庫資訊頁面,點選settings
點選Collaborators
輸入被邀請人賬号,點選Add collaborator
複制邀請連結
被邀請賬号
打開浏覽器新視窗,在位址欄通路剛剛複制的連結
點選Accept invitaion 接受邀請
變為團隊成員後可以推送代碼到遠端庫了
GitHub注意事項
1. 推送之前先拉取
GitHub拉取的原則是要随時拉取,随時推送。當完成了一個小功能,能夠通過編譯并且自己測試之後,謹慎地推送。
如果在修改的期間别人也更改了相同的檔案,那麼推送就可能會産生沖突,這種情況就需要同之前的開發人員聯系,兩個人一起協商解決沖突,解決沖突之後,需要兩人一起測試保證解決沖突之後,程式不會影響其他功能。
2. 不要推送不能通過編譯的代碼
代碼在推送之前,首先要确認自己能夠在本地編譯。如果在代碼中使用了第三方類庫,要考慮到項目組成員中有些成員可能沒有安裝相應的第三方類庫。項目經理在準備項目工作區域的時候,需要考慮到這樣的情況,確定開發小組成員在簽出代碼之後能夠在統一的環境中進行編譯。
3. 不要推送自己不明白的代碼
代碼在推送進入到GitHub之後,你的代碼将被項目成員所分享。如果送出了你不明白的代碼,你看不懂,别人也看不懂,如果在以後出現了問題将會成為項目品質的隐患。是以在引入任何第三方代碼之前,確定你對這個代碼有一個很清晰的了解。
4. 提前協調好項目組成員的工作計劃
項目經理應該合理配置設定工作計劃。每個成員在準備開始進行某項功能的修改之前,如果有可能,先跟工作小組的成員談談自己的修改計劃,讓大家都能了解你的思想,了解你即将對軟體作出的修改,這樣能盡可能的減少在開發過程中可能出現的沖突,提高開發效率。同時你也能夠在和成員的交流中發現自己之前設計的不足,完善你的設計。
idea使用Git&GitHub
基本配置
首先建立一個示範項目(web項目即可),然後建立一個User類,裡面寫上初始測試内容
打開settings --> Version Control --> GitHub
填寫GitHub網址,賬号,密碼,然後點選Test測試
上述測試成功後,配置Git
打開settings --> Version Control --> Git
第一欄文本框會自動識别到本地Git安裝路徑下的git.exe
點選測試
其他項維持預設即可
以上就是IDEA對于GitHub和Git的基本配置
以上配置完畢後,我們來操作項目
将IDEA項目push(推送)到GitHub
建立本地庫
選中目前項目作為本地庫
以上操作之後,會在目前項目的本地看到.git檔案夾
說明目前項目檔案夾作為本地庫存在
将項目送出到暫存區
項目右鍵 --> Git --> Add
将項目送出到本地庫
首先我們在送出前,需要忽略掉.iml檔案
settings --> Editor --> File Types
添加*.iml
項目右鍵
選中剛剛子產品中寫好的未送出過的檔案
點選Commit送出
将本地庫中的檔案上傳到遠端庫
第一次送出,需要先寫入送出的GitHub庫的名字,以及上傳位址
在GitHub上建立一個新倉庫CRM
填寫完以上資訊後,推送項目到GitHub遠端庫
GitHub遠端庫clone項目到IDEA
建立一個空的Project,在另一個視窗打開(同時保留原有的項目視窗)
開始clone項目
填寫基本資訊
作為一個maven項目導入
将Maven項目目錄結構寫完整(注意檔案夾顔色要賦予正确的顔色)
當編寫java代碼時,會提示沒有編譯環境
點選右側的setup sdk
将加入了新屬性的User類推送到遠端庫
注意:推送前,不要忘記先Add!!!
Add之後Commit and push
切換到第一個項目
暫時隻有id屬性(第二個項目有id屬性和name屬性)
是以第一個項目需要将name屬性拉取,将更新為最新版
右鍵User類
如下圖所示,所有預設,點選Pull
如果本地更改過檔案(沒有及時上傳),拉取時會産生沖突
例如本地要上傳的新屬性是phone
但是遠端庫,最新的屬性是address
這樣會産生沖突,pull會失敗
此時老版本idea,必須先要進行以下操作:
先将自己本地庫最新的版本先以Stash的方式儲存
然後再拉取
就會拉取成功了
最後将本地最新版(屬性phone)合并進去
我們會看到即保留了剛剛pull遠端庫的最新版本的代碼(address),又保留了自己本地庫(phone)的代碼
(新版本idea會直接跳到這步)
調整沖突後(同時保留phone和address),執行add和commit操作,并push到遠端庫
注意:解決沖突後的檔案,必須先add,在commit