Git——基礎篇

卡斯特梅的雨傘發表於2021-07-11

Git——基礎篇

Git簡而言之就是個版本控制工具,用於跟蹤和管理程式碼的工具。

版本控制

本地版本控制

就是我們自己本地對文件進行儲存檔案的每一個修改版本的記錄。

集中式版本控制——SVN

有一個遠端伺服器對文件進行維護版本,歷史版本存放在遠端伺服器中,所有人對該版本進行同步更新或提交修改,多對一的關係。

缺點時如果遠端伺服器當機了那麼就會有單點故障問題,導致不可用,且無法檢視歷史版本。

集中式版本控制.png

分散式版本控制

每個使用者或者說使用者的電腦上都擁有一個版本控制倉庫,因此所有人都可以在本地檢視版本的歷史記錄,可以離線在本地提交,當需要提交到遠端伺服器上時只需執行push即可。當然push前要先拉去到遠端伺服器上最新的文件,本質上說和集中式版本控制差不多,最終都是以遠端伺服器上的文件為主,不同的是版本的迭代歷史記錄從遠端伺服器上只有一份變成了所有的人都維護儲存一份所有的版本記錄,理論上只要有一個使用者的裝置沒有問題就能恢復所有的資料,但相對的增加了每個使用者本地的儲存空間的佔用

優點是不會因為遠端伺服器的當機等故障而導致版本丟失無法工作的問題,但只是儘可能地減少了問題導致的故障,提高了容錯性,因為最終還是要以遠端伺服器上的版本為主,只是因為每個使用者都維護了一份版本記錄使得容錯性大大提高,可以快速地使用本地版本資料恢復正常。

Git和SVN的區別

  • GIT是分散式版本控制,SVN是集中式版本控制。
  • GIT把內容按後設資料方式儲存(簡單說就是Git在本地就是一個 克隆版的版本庫 ),而SVN是按檔案。
  • GIT分支和SVN的分支不同, SVN的分支就是版本庫中的另外的一個目錄,而Git的分支因為我們本地有個版本庫而切換和使用非常簡潔方便。
  • GIT沒有一個全域性的版本號,而SVN有。SVN的版本號實際是任何一個相應時間的原始碼快照,而Git是所有人都有一份版本庫,不需要像SVN這樣處理。
  • GIT的內容完整性要優於SVN。 GIT的內容儲存使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。

Git和SVN的區別

GIT與SVN之間的五大基本區別

前提準備

linux基本命令

linux基本命令.png

Git的命令窗

git命令窗.png

#刪除linux下全部檔案,/斜槓表示從根目錄開始遞迴迭代刪除,千萬不要亂使用
rm -rf /

Git配置

#檢視git配置
git config -l

#檢視git的系統級別的配置
git config --system --list

#git的本地或者說全域性配置
git config --global --list

#設定全域性使用者名稱和郵箱,用於向git標識自己的身份id,git每次提交都會使用到該資訊
#全域性配置使用者名稱
git config --global user.name "wayne"

#全域性配置郵箱
git config --global user.email "eamil@qq.com"


Git配置檔案地址

git配置.png

Git基本工作原理

工作區域.png
工作區域2.png

git倉庫目錄.png
git倉庫目錄2.png

git倉庫3.png

Git專案搭建

#在當前目錄下新建一個git本地倉庫
git init

#克隆遠端倉庫到本地
git clone [url]
git clone https://github.com/roylai47/git-test.git

建立遠端專案

github建立遠端倉庫.png

#克隆遠端倉庫到本地 直接在idea的terminal視窗中執行git命令
git clone [url]
git clone https://github.com/roylai47/git-test.git

Git基本操作

基本操作

#檢視檔案狀態
git status [filename]

#檢視所有檔案狀態
git status

#正常一次提交流程
#先從遠端伺服器上拉取
git pull origin master

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

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

#推送本地提交到遠端伺服器上
git push origin master

git搭建專案.png
git忽略檔案.png

忽略檔案

# 表示忽略這個資料夾裡的檔案
/target/

image.png

常用.gitignore檔案

檔案1:

### gradle ###
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar

### STS ###
.settings/
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans


### IntelliJ IDEA ###
/.idea/
/private/
/storage/
/litemall.iml
.checkstyle
.idea
*.iws
*.iml
*.ipr
rebel.xml
### maven ###
target/
*.war
*.ear
*.zip
*.tar
*.tar.gz

### logs ####
/logs/
*.log

### temp ignore ###
*.cache
*.diff
*.patch
*.tmp
*.java~
*.properties~
*.xml~

### system ignore ###
.DS_Store
Thumbs.db
Servers
.metadata
upload
gen_code

檔案2:

# Eclipse project files
.project
.classpath
.settings


# IntelliJ IDEA project files and directories
*.iml
*.ipr
*.iws
.idea/

# Geany project file
.geany

# KDevelop project file and directory
.kdev4/
*.kdev4

# Build targets
/target
*/target

# Report directories
/reports
*/reports

# Mac-specific directory that no other operating system needs.
.DS_Store

# JVM crash logs
hs_err_pid*.log

# SVN
.svn

# test log
logs/

#db
db/

配置SSH公鑰——用於ssh地址

#生成ssh公鑰
ssh-keygen
#增加字尾是可以指定公鑰的加密方式為rsa
ssh-keygen -t rsa 
#注意連續3次空格生成

地址C:\Users\castamere\.ssh

IDEA操作Git

idea git.png
idea git2.png

實用操作

基於索引值的版本前進後退

#基於索引值的版本前進後退,獲取當前索引值
git reflog

#回退到索引值所在的版本 2cb2e6c
git reset --hard 2cb2e6c 

#回退到某個分支
git rest --hard origin/master

#基於HEAD指標回退一步
git reset --hard HEAD^

#基於HEAD指標回退3步,就加3個^
git reset --hard HEAD^^^

#基於HEAD指標回退3步,就加~3
git reset --hard HEAD~

git reset.png

Git合併衝突

#當前分支dev,執行git merge master是把master分支合併到當前分支上
git merge master

Git執行merge合併操作時,如果有衝突,會描述出衝突,並在衝突的位置加入衝突部分,需要我們人工介入處理。

刪除下圖中顯示衝突的標示行,再把衝突的程式碼調整到我們想要的結果即可。

merge.png

merge2.png

最後再提交push請求到遠端伺服器上就好了。

Git保證資料的完整性

Git通過加密比較加密結果

加密.png

版本資料管理機制

SVN是增量版本資料管理機制,只保留變化的部分。

Git是快照流。

快照流.png

Gitlab伺服器搭建

ce與ee的區別是ce是社群版(Community Edition),ee是企業版(Enterprise Edition)。

gitlab1.png
gitlab2.png

把上面的安裝過程中的命令放在一個安裝指令碼中install.sh

然後再更改指令碼執行許可權為可執行檔案

chmod 755 install.sh
#執行安裝指令碼
./install.sh

#安裝完成後需要重啟伺服器
reboot

#執行gitlab初始化配置
gitlab-ctl reconfigure

#啟動gitlab
gitlab-ctl start

#停止gitlab
gitlab-ctl stop

#關閉防火牆,避免訪問不了,生產上不要粗暴關閉防火牆,而是開放gitlab的埠號
service firewalld stop

注意:執行前先儲存快照用於安裝出現問題時回滾。

gitlab包含了很多中介軟體比如redis、Nginx等。

gitlab3.png

擴充套件

  1. Git是Linus開發出來的,目前最優秀的版本控制工具。
  2. 所有下載慢的【需要連線外網或者訪問資源伺服器在國外的網站】軟體或工具都可以通過映象去下載,比如淘寶、阿里等的映象。
  3. linux系統中,一切皆檔案。
  4. 所有的配置檔案,在本地都會儲存一份。
  5. 配置環境變數只是為了能全域性使用,並不影響軟體的使用。如果想在任何位置都可以使用就需要配置環境變數。
  6. 暫存區本質上只是個檔案Index.可以檢視.git資料夾看到。
  7. idea的terminal視窗中執行git命令。
  8. git大全
  9. git歷史記錄的操作前進後退其實是操作HEAD指標的移動。

HEAD.png

  1. Git中被刪除的檔案只要有提交記錄就永遠都可以從歷史版本中拿到,只需要恢復到歷史版本總拿到該檔案,再回到最新的檔案中新增即可。或者只是檢視歷史版本,然後複製出來即可。
  2. docker無法在centOS7以下搭建,不要選擇安裝centOS7以下的版本。

問題

重要:建立一個新專案,如何把新專案新增到gitlab或者github中?

步驟:

  1. 首先要現在github上建立一個專案名對於的遠端倉庫,比如說git-test。

  2. 然後把該專案拉去到本地來。執行pull命令

  3. 接著在idea中建立一個新專案,專案的路徑就選擇剛剛從github上拉去下來的git-test資料夾所在的路徑。不用擔心無法建立成功或者有衝突。

  4. 再把建立的專案初始化好,配置好.gitignore檔案,把/target/ .idea等這些檔案排除掉。

  5. 最後再提交程式碼並推送到遠端伺服器上,這樣其他人就可以拉取到新專案的程式碼協同工作了。

#暫存所有檔案 .表示所有的,如果有指定的檔案則在add 後輸入指定的檔名
git add .
#提交到本地參考
git commit -m "gitinit"
#推送到遠端伺服器
git push origin master

參考

尚矽谷Git :較全面

狂神Git :太過簡單隻能做到滿足初學者日常提交使用僅此而已。

相關文章