Git——基礎篇


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 :太過簡單只能做到滿足初學者日常提交使用僅此而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM