參考鏈接:
-
視頻同步筆記:狂神聊Git https://mp.weixin.qq.com/s/Bf7uVhGiu47uOELjmC5uXQ
1、版本控制
版本控制(Revision control)是一種在開發的過程中用於管理文件、目錄或工程等內容的修改歷史,方便查看更改歷史記錄,備份以便恢復以前的版本的軟件工程技術。
1.1 常見的版本控制工具
主流的版本控制器有如下這些:
-
Git
-
SVN(Subversion)
-
CVS(Concurrent Versions System)
-
VSS(Micorosoft Visual SourceSafe)
-
TFS(Team Foundation Server)
-
Visual Studio Online
版本控制產品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現在影響力最大且使用最廣泛的是Git與SVN。
1.2 版本控制分類
1、本地版本控制
記錄文件每次的更新,可以對每個版本做一個快照,或是記錄補丁文件,適合個人用,如RCS。
2、集中版本控制 SVN
所有的版本數據都保存在服務器上,協同開發者從服務器上同步更新或上傳自己的修改。
所有的版本數據都存在服務器上,用戶的本地只有自己以前所同步的版本,如果不連網的話,用戶就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有數據都保存在單一的服務器上,有很大的風險這個服務器會損壞,這樣就會丟失所有的數據,當然可以定期備份。代表產品:SVN、CVS、VSS。
3、分布式版本控制 Git
所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網時push到相應的服務器或其他用戶那里。由於每個用戶那里保存的都是所有的版本數據,只要有一個用戶的設備沒有問題就可以恢復所有的數據,但這增加了本地存儲空間的占用。不會因為服務器損壞或者網絡問題,造成不能工作的情況!
1.3 Git與SVN的主要區別
SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而工作的時候,用的都是自己的電腦,所以首先要從中央服務器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,對網絡帶寬要求較高(集中式的版本控制軟件,權限控制強,適合集中協作)。
Git是分布式版本控制系統,沒有中央服務器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯網了,因為版本都在自己電腦上。協同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。Git可以直接看到更新了哪些代碼和文件!(分布式的版本控制軟件,適合分工協作)
2、Git
Git 是一個分布式版本控制軟件, 最初是為了更好的管理Linux內核而設計的的,如今發展為各種語言進行版本控制。Git的作者就是Linux的作者林納斯.托瓦茲。 他是Linux內核的首要架構師與項目協調者, 是當今世界上最著名的電腦程序員與黑客之一。
2.1 Git的組成結構圖
Git本地有三個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠程的git倉庫(Remote Directory)就可以分為四個工作區域。文件在這四個區域之間的轉換關系如下:
-
Workspace:工作區,就是你平時存放項目代碼的地方
-
Index / Stage:暫存區,用於臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息
-
Repository:倉庫區(或本地倉庫),就是安全存放數據的位置,這里面有你提交到所有版本的數據。其中HEAD指向最新放入倉庫的版本
-
Remote:遠程倉庫,托管代碼的服務器,可以簡單的認為是你項目組中的一台電腦用於遠程數據交換
本地的三個區域確切的說應該是git倉庫中HEAD指向的版本:
-
Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。
-
WorkSpace:需要通過Git進行版本控制的目錄和文件,這些目錄和文件組成了工作空間。
-
.git:存放Git管理信息的目錄,初始化倉庫的時候自動創建。
-
Index/Stage:暫存區,或者叫待提交更新區,在提交進入repo之前,我們可以把所有的更新放在暫存區。
-
Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當前的開發分支(branch)。
-
Stash:隱藏,是一個工作狀態保存棧,用於保存/恢復WorkSpace中的臨時狀態。
或
Git組成架構:
-
Remote遠程倉庫:各廠商提供的倉庫。 例如GitHub, Gitee, GitLab
-
Repository本地倉庫:在本地存放項目或文件的目錄
-
index暫存區:暫時存放文件。 覺得文件不需要修改了, 在提交到本 地倉庫中。 最終可以提交到遠程倉庫上
-
workspace工作區:就是存放項目或文件的工作目錄
2.2 工作流程
git的工作流程一般是這樣的:
1.在工作目錄中添加、修改文件;
2.將需要進行版本管理的文件放入暫存區域;
3.將暫存區域的文件提交到git倉庫。
因此,git管理的文件有三種狀態:已修改(modified),已暫存(staged),已提交(committed)
2.3 Git文件操作
(1)文件的四種狀態
版本控制就是對文件的版本控制,要對文件進行修改、提交等操作,首先要知道文件當前在什么狀態,不然可能會提交了現在還不想提交的文件,或者要提交的文件沒提交上。
-
Untracked: 未跟蹤, 此文件在文件夾中, 但並沒有加入到git庫, 不參與版本控制. 通過git add 狀態變為Staged.
-
Unmodify: 文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變為Modified. 如果使用git rm移出版本庫, 則成為Untracked文件
-
Modified: 文件已修改, 僅僅是修改, 並沒有進行其他的操作. 這個文件也有兩個去處, 通過git add可進入暫存staged狀態, 使用git checkout 則丟棄修改過, 返回到unmodify狀態, 這個git checkout即從庫中取出文件, 覆蓋當前修改 !
-
Staged: 暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變為一致, 文件為Unmodify狀態. 執行git reset HEAD filename取消暫存, 文件狀態為Modified。
(2)查看文件狀態
上面說文件有4種狀態,通過如下命令可以查看到文件的狀態:
#查看指定文件狀態
git status [filename]
#查看所有文件狀態
git status
# git add . 添加所有文件到暫存區
# git commit -m "消息內容" 提交暫存區中的內容到本地倉庫 -m 提交信息
(3)忽略文件
有些時候我們不想把某些文件納入版本控制中,比如數據庫文件,臨時文件,設計文件等,可以在主目錄下建立".gitignore"文件,此文件有如下規則:
-
忽略文件中的空行或以井號(#)開始的行將會被忽略。
-
可以使用Linux通配符。例如:星號(*)代表任意多個字符,問號(?)代表一個字符,方括號([abc])代表可選字符范圍,大括號({string1,string2,...})代表可選的字符串等。
-
如果名稱的最前面有一個感嘆號(!),表示例外規則,將不被忽略。
-
如果名稱的最前面是一個路徑分隔符(/),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
-
如果名稱的最后面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認文件或目錄都忽略)。
#為注釋*
.txt #忽略所有.txt結尾的文件,這樣的話上傳就不會被選中!
!lib.txt #但lib.txt除外
/temp #僅忽略項目根目錄下的TODO文件,不包括其它目錄
tempbuild/ #忽略build/目錄下的所有文件
doc/*.txt #會忽略doc/notes.txt但不包括 doc/server/arch.txt
忽略文件:.gitignore:
*.class
*.log
*.lock
# Package Files #
*.jar
*.war
*.ear
target/
# idea
.idea/
*.iml/
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBeans
### IntelliJ IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tem/
#rebel
*rebel.xml*
2.4 工作中使用Git來克隆並開發項目的整個流程
第一步:首先通過組里給分配的賬號通過Git克隆一個項目到自己的電腦中。 這一步一定要有網!
第二步:克隆項目到本地電腦的倉庫中后, 通過checkout從本地倉庫中檢出到自己的開發工作空間中。
第三步:開始編寫代碼, 編寫完畢后, 確保沒有問題了, 再提交到暫存區里。 如果覺得代碼有問題, 重新編寫代碼再次提交到暫存區中。 確定無誤后, 在提交到本地倉庫中。
第四步:最終檢查代碼, 如果沒有問題了, 則將本地倉庫中的代碼最終提交給遠程倉庫里。 一定要記住, 遠程倉庫里的代碼是最終要上線的, 所以一定要本地倉庫中的 代碼測試沒有問題了, 在最終提交到遠程倉庫中。
注意:pull 這個命令僅僅是把項目拉到你的工作空間中, 但是不能進行提交, 僅作為查看來使用。
3、安裝Git
3.1 下載
官網下載:https://git-scm.com,下載速度較慢
淘寶鏡像下載:http://npm.taobao.org/mirrors/git-for-windows/,下載速度較快
下載對應的版本即可安裝!
3.2 安裝
一路Next就可以完成安裝,安裝完畢就可以使用了。
3.3 啟動Git
安裝成功后在開始菜單中會有Git項,菜單下有3個程序:任意文件夾下右鍵也可以看到對應的程序!Git的中的命令與Linux的命令一樣。
Git Bash:Unix與Linux風格的命令行,使用最多,推薦最多;【主要使用這個】
Git CMD:Windows風格的命令行;
Git GUI:圖形界面的Git,不建議初學者使用,盡量先熟悉常用命令。
3.5 常用的Linux命令
平時一定要多使用這些基礎的命令!
1)cd : 改變目錄。
2)cd . . 回退到上一個目錄,直接cd進入默認目錄
3)pwd : 顯示當前所在的目錄路徑。
4)ls(ll): 都是列出當前目錄中的所有文件,只不過ll(兩個ll)列出的內容更為詳細。
5)touch : 新建一個文件 如 touch index.js 就會在當前目錄下新建一個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 是目標文件夾,當然, 這樣寫,必須保證文件和目標文件夾在同一目錄下。
10)reset 重新初始化終端/清屏。
11)clear 清屏。
12)history 查看命令歷史。
13)help 幫助。
14)exit 退出。
15)#表示注釋
3.5 配置Git身份信息
所有的配置文件,其實都保存在本地!
查看配置: git config -l
查看不同級別的配置文件:
#查看系統config
git config --system --list
#查看當前用戶(global)配置
git config --global --list
Git相關的配置文件:
1)Git\etc\gitconfig :Git 安裝目錄下的 gitconfig --system 系統級
2)C:\Users\Administrator\ .gitconfig 只適用於當前登錄用戶的配置 --global 全局
這里可以直接編輯配置文件,通過命令設置后會響應到這里。
設置用戶名與郵箱(用戶標識,必要)
當你安裝Git后首先要做的事情是設置你的用戶名稱和e-mail地址。這是非常重要的,因為每次Git提交都會使用該信息。它被永遠的嵌入到了你的提交中:
git config --global user.name "kuangshen" #名稱
git config --global user.email 24736743@qq.com #郵箱
只需要做一次這個設置,如果你傳遞了--global 選項,因為Git將總是會使用該信息來處理你在系統中所做的一切操作。如果你希望在一個特定的項目中使用不同的名稱或e-mail地址,你可以在該項目中運行該命令而不要--global選項。總之--global為全局配置,不加為某個項目的特定配置。
4、Git項目搭建
4.1 創建工作目錄與常用指令
工作目錄(WorkSpace)一般就是你希望Git幫助你管理的文件夾,可以是你項目的目錄,也可以是一個空目錄,建議不要有中文。
日常使用只要記住下圖6個命令:
4.2 本地倉庫搭建
創建本地倉庫的方法有兩種:一種是創建全新的倉庫,另一種是克隆遠程倉庫。
(1)創建全新的倉庫,需要用GIT管理的項目的根目錄執行:
# 在當前目錄新建一個Git代碼庫
$ git init
執行后可以看到,僅僅在項目目錄多出了一個.git目錄,關於版本等的所有信息都在這個目錄里面。
(2)另一種方式是克隆遠程目錄,是將遠程服務器上的倉庫完全鏡像一份至本地!
# 克隆一個項目和它的整個代碼歷史(版本信息)
$ git clone [url] # https://gitee.com/kuangstudy/openclass.git
去 gitee 或者 github 上克隆一個測試!
4.3 使用碼雲
github 是有牆的,比較慢,在國內的話,我們一般使用 gitee ,公司中有時候會搭建自己的gitlab服務器。
1、注冊登錄碼雲,完善個人信息
2、設置本機綁定SSH公鑰,實現免密碼登錄!(免密碼登錄,這一步挺重要的,碼雲是遠程倉庫,我們是平時工作在本地倉庫!)
# 進入 C:\Users\Administrator\.ssh 目錄
# 生成公鑰
ssh-keygen
3、將公鑰信息public key 添加到碼雲賬戶中即可!
4、使用碼雲創建一個自己的倉庫!
許可證:開源是否可以隨意轉載,開源但是不能商業使用,不能轉載,... 限制!
克隆到本地!
查看賬號信息:
查看SSH公鑰:
查看私有倉庫成員:
點擊倉庫右側的“管理”可修改倉庫是否開源:私有or公開
5、IDEA中集成Git
5.1 配置Git
菜單欄順序選擇: File->Settings,在彈出框中選擇下圖中的Git
然后點擊右側上方輸入框 Path to Git executable:中右面的瀏覽圖標(小文件夾),並定位git的可執行程序(git.exe文件在git安裝目錄下的cmd文件夾中)。
點擊Test按鈕。如果點擊后可以顯示出版本號,說明配置成功,此時點擊窗口下側的OK按鈕即可。
5.2 使用Git推送項目
1、創建倉庫
點擊頁面右上方的"+"並選擇"創建倉庫"
2、設置倉庫相關信息
首先輸入倉庫名,通常可以和IDEA中項目名相同,是否開源則可結合需求選擇,這里選擇的私有(該項目僅自己可見)
然后點擊下方的"創建"按鈕.
此時gitee上完成了倉庫的創建工作。
3、復制當前倉庫路徑,這個路徑需要在后面IDEA上傳項目時使用.
4、在IDEA中將項目導入版本控制
在IDEA菜單欄順序選擇: VCS->Import into Version Control->Create Git Repository,目的是先在本地創建一個git倉庫
彈出框中當前項目,點擊"OK"按鈕即可
5、鼠標右鍵項目名,在彈出的菜單欄中順序選擇:Git->Add
目的是將當前項目中本地倉庫沒有的內容添加到本地倉庫中(實際上並沒有真實添加,只有在下一步操作中才會真實添加,但是所有倉庫中沒有的文件都需要先add后才可以通過下面的步驟添加到倉庫!)
6、提交更改
鼠標右鍵當前項目名,在彈出的菜單欄中順序選擇:Git->Commit Directory
之后輸入本次提交的備注,例如:第一次提交(注:這里必須輸入內容,否則無法提交)。然后點擊Commit按鈕進行本地提交。
目的:提交的目的是將當前項目保存到本地倉庫中。
之后,點擊IDEA左側邊條的1:Project回到項目結構視圖
鼠標右鍵項目名,在彈出的菜單欄中順序選擇:Git->Repository->Push
目的就是將本地倉庫保存的內容同步到服務器(上傳到服務器,並使服務器中的倉庫與本地倉庫內容保持一致)。
第一次操作時需要配置服務器倉庫地址,點擊彈出框中的Define remote
在彈出框中的URL輸入框中添加gitee上創建的倉庫路徑(第一大步最后一小步中在頁面上復制的倉庫路徑),並點擊OK按鈕
之后IDEA會自動檢查鏈接,沒有問題,則點擊下方的Push按鈕
第一次提交時要求輸入gitee上的賬號和密碼,輸入后可選中Remember記住密碼,后續就不需要輸入了。
此時完成提交,右下方會提示。
附:push失敗的解決辦法:
上面最后一步若提交失敗,會在右下側提示。
此時點擊IDEA下測控制台選項打開控制台視圖:
在控制台中依次執行下面三個命令:
git pull
git pull origin master
git pull origin master --allow-unrelated-histories
如圖:
之后再嘗試push。
5.3 利用Git拉取項目
1、訪問gitee或github,找到項目對應的倉庫,並復制倉庫地址。
2、打開IDEA,依次選擇菜單:File->New->Project from Version Control
3、在彈出框中輸入倉庫路徑(從第一步中gitee或github復制的路徑),並點擊Clone
4、在彈出框中輸入gitee或github的賬號和密碼並點擊Log in
等待下載完畢即可。