1. 程式人生 > 其它 >【筆記】【git】【狂神說Java】Git最新教程通俗易懂 -學習筆記

【筆記】【git】【狂神說Java】Git最新教程通俗易懂 -學習筆記

前言

學習視訊:【狂神說Java】Git最新教程通俗易懂

感謝狂神!!!


此筆記用於記錄本人在學習中還有不懂以及值得注意的地方。以方便日後的工作與學習。


筆記中有些個人理解後整理的筆記,可能有所偏差,也懇請讀者幫忙指出,謝謝。

部分內容不完整,請讀者結合視訊觀看效果更佳。


注意:

此筆記並非完整筆記

需要完整筆記的同學可以移步到視訊同步筆記:狂神聊Git


再次感謝狂神!!!

跟對人,做對事。——狂神說



什麼是版本控制?

  • 用於管理多人協同開發專案的技術
  • 對檔案的版本控制,要對檔案進行修改、提交等操作

版本控制分類

1、本地版本控制 RCS

  • 記錄檔案每次的更新
  • 以對每個版本做一個快照,或是記錄補丁檔案
  • 適合個人用

2、集中版本控制 SVN

  • 所有的版本資料都儲存在伺服器上
  • 協同開發者從伺服器上同步更新或上傳自己的修改
  • 使用者的本地只有自己以前所同步的版本,如果不連網的話,使用者就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。
  • 所有資料都儲存在單一的伺服器上,有很大的風險這個伺服器會損壞,這樣就會丟失所有的資料,當然可以定期備份

3、分散式版本控制 Git

  • 每個人都擁有全部的程式碼!安全隱患!
  • 所有版本資訊倉庫全部同步到本地的每個使用者,這樣就可以在本地檢視所有版本歷史,可以離線在本地提交,只需在連網時push到相應的伺服器或其他使用者那裡。
  • 由於每個使用者那裡儲存的都是所有的版本資料,只要有一個使用者的裝置沒有問題就可以恢復所有的資料,但這增加了本地儲存空間的佔用。
  • 不會因為伺服器損壞或者網路問題,造成不能工作的情況!

Git與SVN的主要區別

Git SVN
版本控制系統 分散式 集中式
版本庫 沒有中央伺服器,每個人的電腦就是一個完整的版本庫 集中放在中央伺服器
是否需要聯網 工作的時候不需要聯網 必須聯網才能工作,對網路頻寬要求較高。
協同方式 自己在電腦上改了檔案A,其他人也在電腦上改了檔案A,這時只需把各自的修改推送給對方,就可以互相看到對方的修改了。Git可以直接看到更新了哪些程式碼和檔案! 首先要從中央伺服器得到最新的版本,然後工作,完成工作後,需要把自己做完的活推送到中央伺服器。

軟體下載安裝

自行看視訊

安裝Git及環境配置


啟動Git

Git Bash:Unix與Linux風格的命令列,使用最多,推薦最多

Git CMD:Windows風格的命令列

Git GUI:圖形介面的Git,不建議初學者使用,儘量先熟悉常用命令


常用的Linux命令

命令 描述
cd 檔案路徑 改變目錄。
cd . . 回退到上一個目錄,直接cd進入預設目錄
pwd 顯示當前所在的目錄路徑。
ls(ll) 列出當前目錄中的所有檔案,ll(兩個ll)列出的內容更為詳細
touch 檔名(帶字尾) 新建一個檔案
rm 檔名(帶字尾) 刪除一個檔案
mkdir 目錄名 新建一個資料夾(目錄)
rm -r 目錄名 刪除一個資料夾(目錄)
mv 移動檔案 目標檔案 移動檔案
reset 重新初始化終端/清屏
clear 清屏
history 檢視命令歷史
help 幫助
exit 退出
# 註釋

注意:rm -rf 切勿在Linux中嘗試!刪除電腦中全部檔案!


Git配置

所有的配置檔案,其實都儲存在本地!

具體Git配置視訊講解的非常清楚,跟著Git的必要配置一步一步配置即可,這裡就不再贅述了。


配置過程中涉及到的git語句

檢視配置

git config -l

檢視不同級別的配置檔案

#檢視系統config
git config --system --list
  
#檢視當前使用者(global)配置
git config --global  --list

--global:全域性配置


設定使用者名稱與郵箱(使用者標識,必要)

  • 每次Git提交都會使用該資訊。它被永遠的嵌入到了你的提交中
git config --global user.name " "  #名稱
git config --global user.email " "   #郵箱

Git基本理論(重要)

三個區域

Git本地有三個工作區域:

  • 工作目錄(Working Directory)
  • 暫存區(Stage/Index)
  • 資源庫(Repository或Git Directory)
  • 遠端的git倉庫(Remote Directory)【第四個工作區域】

檔案在這四個區域之間的轉換關係

Remote:遠端倉庫,託管程式碼的伺服器,可以簡單的認為是你專案組中的一臺電腦用於遠端資料交換

Repository倉庫區(或本地倉庫),就是安全存放資料的位置,這裡面有你提交到所有版本的資料。其中HEAD指向最新放入倉庫的版本

ndex / Stage:暫存區,用於臨時存放你的改動,事實上它只是一個檔案,儲存即將提交到檔案列表資訊

Workspace:工作區,就是你平時存放專案程式碼的地方


檔案在這四個區域的具體儲存

Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。

WorkSpace:需要通過Git進行版本控制的目錄和檔案,這些目錄和檔案組成了工作空間。

git:存放Git管理資訊的目錄,初始化倉庫的時候自動建立。

Index/Stage:暫存區,或者叫待提交更新區,在提交進入repo之前,我們可以把所有的更新放在暫存區。

Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當前的開發分支(branch)。

Stash:隱藏,是一個工作狀態儲存棧,用於儲存/恢復WorkSpace中的臨時狀態。


工作流程

流程 git管理的檔案狀態
1、在工作目錄中新增、修改檔案; 已修改(modified)
2、將需要進行版本管理的檔案放入暫存區域; 已暫存(staged)
3、將暫存區域的檔案提交到git倉庫。 已提交(committed)

Git專案搭建

建立工作目錄常用指令

WorkSpace(工作目錄):你希望Git幫助你管理的資料夾,可以是你專案的目錄,也可以是一個空目錄,建議不要有中文。


本地倉庫搭建

建立全新的倉庫

# 在當前目錄新建一個Git程式碼庫
$ git init

執行後可以看到在專案目錄多出了一個.git目錄,關於版本等的所有資訊都在這個目錄裡面。


克隆遠端倉庫

  • 將遠端伺服器上的倉庫完全映象一份至本地!
# 克隆一個專案和它的整個程式碼歷史(版本資訊)
$ git clone [url]  # https://gitee.com/kuangstudy/openclass.git

Git檔案操作

要對檔案進行修改、提交等操作,首先要知道檔案當前在什麼狀態,不然可能會提交了現在還不想提交的檔案,或者要提交的檔案沒提交上。


檔案的四種狀態

Untracked(未跟蹤)

檔案位置:在資料夾中, 但並沒有加入到git庫, 不參與版本控制.

去處

目標狀態 實現方法
Staged(暫存狀態) git add

git add . :新增所有檔案到暫存區


Unmodified( 未修改, 即版本庫中的檔案快照內容與資料夾中完全一致)

檔案位置:已經入庫

去處

目標狀態 實現方法
Modified(已修改) 檔案被修改
Untracked(未跟蹤) git rm(移出版本庫)

Modified(已修改, 僅僅是修改, 並沒有進行其他的操作)

檔案位置:已經入庫

去處

目標狀態 實現方法
Staged(暫存狀態) git add
Unmodified(未修改) git checkout(丟棄修改過,即從庫中取出檔案, 覆蓋當前修改)

Staged(暫存狀態)

去處

目標狀態 實現方法
Unmodified(未修改) git commit(將修改同步到庫中,這時庫中的檔案和本地檔案又變為一致)
Modified(已修改) git reset HEAD filename(取消暫存)

git commit -m "訊息內容":提交暫存區中的內容到本地倉庫 -m 提交資訊


檔案狀態去處圖

請讀者結合上述檔案狀態去處來看此圖效果更佳


檢視檔案狀態

檢視指定檔案狀態

git status [filename]

檢視所有檔案狀態

git status

忽略檔案

有些時候我們不想把某些檔案納入版本控制中,比如資料庫檔案,臨時檔案,設計檔案等

在主目錄下建立".gitignore"檔案,此檔案有如下規則:

1、忽略檔案中的空行或以井號(#)開始的行將會被忽略。

2、可以使用Linux萬用字元。例如:星號(*)代表任意多個字元,問號(?)代表一個字元,方括號([abc])代表可選字元範圍,大括號({string1,string2,...})代表可選的字串等。

3、如果名稱的最前面有一個感嘆號(!),表示例外規則,將不被忽略。

4、如果名稱的最前面是一個路徑分隔符(/),表示要忽略的檔案在此目錄下,而子目錄中的檔案不忽略。

5、如果名稱的最後面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非檔案(預設檔案或目錄都忽略)。

#為註釋
*.txt        #忽略所有 .txt結尾的檔案,這樣的話上傳就不會被選中!
!lib.txt     #但lib.txt除外
/temp        #僅忽略專案根目錄下的TODO檔案,不包括其它目錄temp
build/       #忽略build/目錄下的所有檔案
doc/*.txt    #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt

使用碼雲

gitee和github的使用,視訊裡很詳細,就不贅述了。


設定本機繫結SSH公鑰,實現免密碼登入!

配置SSH公鑰及建立遠端倉庫


IDEA中整合Git

IDEA中整合Git操作


Git分支簡介

分支:暫時理解成平行宇宙

常見分支型別

master(主分支):應該非常穩定,用來發布新版本,一般情況下不允許在上面工作

dev:工作一般情況下在新建的dev分支上工作,工作完後,比如上要釋出,或者說dev分支程式碼穩定後可以合併到主分支master上來。


git分支中常用指令:

列出所有本地分支

git branch

列出所有遠端分支

git branch -r

新建一個分支,但依然停留在當前分支

git branch [branch-name]

新建一個分支,並切換到該分支

git checkout -b [branch]

合併指定分支到當前分支

$ git merge [branch]

刪除分支

$ git branch -d [branch-name]

刪除遠端分支

$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]


IDEA中分支操作


結語

感謝狂神!!!


感謝各位讀者能看到最後!!!