關於Git原理介紹和常用操作總結

2019-09-19     波波說運維

概述

由於gitlab的免費私有倉庫的優勢,所以在公司使用gitlab會多一些,對於gitlab來說,註冊需要翻牆,而登錄不需要。

下面還是主要介紹下git的原理和常用的一些操作。


Git 工作流程

在gitlab上一般每個人或每個項目或者每個bug都會有自己獨立的分支。分支不影響主分支master。

一般工作流程如下:

  • 克隆 Git 資源作為工作目錄。
  • 在克隆的資源上添加或修改文件。
  • 如果其他人修改了,你可以更新資源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成後,如果發現錯誤,可以撤回提交並再次修改並提交。



Git 工作區、暫存區和版本庫

這裡理解git的重心。因為我們使用git,就是在本地電腦上,本地電腦會有自己的倉庫,可以在每個項目文件夾的根目錄均設置一個倉庫。本地倉庫和本地分支和遠程分支是分離的。可以通過pull拉取遠程分支到本地,或push,推送本地分支到遠程分支。

  • 工作區:就是你在電腦里能看到的目錄。
  • 暫存區:英文叫stage, 或index。一般存放在 「.git目錄下」 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
  • 版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關係:

圖中左側為工作區,右側為版本庫。在版本庫中標記為 「index」 的區域是暫存區(stage, index),標記為 「master」 的是 master 分支所代表的目錄樹。

圖中我們可以看出此時 「HEAD」 實際是指向 master 分支的一個」游標」。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換。

圖中的 objects 標識的區域為 Git 的對象庫,實際位於 「.git/objects」 目錄下,裡面包含了創建的各種對象及內容。

當對工作區修改(或新增)的文件執行 「git add」 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。

當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。

當執行 「git reset HEAD」 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。

當執行 「git rm --cached 」 命令時,會直接從暫存區刪除文件,工作區則不做出改變。

當執行 「git checkout .」 或者 「git checkout -- 」 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。

當執行 「git checkout HEAD .」 或者 「git checkout HEAD 」 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區和以及工作區中的文件。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。


git使用前配置

配置帳號密碼和編輯器。首先要讓git知道我們登錄gitlab的帳號和郵箱。git每次聯繫gitlab或github都會使用我們配置的帳號和郵箱

git config --global user.name "hwb"
git config --global user.email [email protected]

至於其他的配置,使用默認即可。

  • 注意:每個目錄下是一個倉庫,倉庫信息通過目錄下的.git文件保存

將本地項目文件夾,上傳到遠程倉庫指定分支的某個文件夾

要修改遠程倉庫的分支內容,需要我們先把遠程倉庫的某個分支pull到本地,在本地添加修改的內容,在push到遠程。所謂的修改包括,添加文件,刪除文件,清空文件等等。

比如我想將我的文件夾上傳到遠程倉庫的hwb分支下的ios/server文件夾下面。

1、選擇一個目錄用來存儲遠程倉庫分支的內容。

git clone -b hwb [email protected]:hwb/cloud-ai.git

2、將遠程倉庫的分支hwb下載到當前目錄。默認master分支

cd 項目目錄

3、查看分支

git branch 查看分支,顯示的就是hwb分支,在文件夾中對應位置添加你的項目文件或文件夾,回到命令行。

git add . 添加當前目錄下的所有文件到緩存區

git status 查看緩存區和版本庫的所有變化

git commit -m "describe" //提交監督的內容的變化到本地版本庫

4、創建一個遠程倉庫的連結

git remote add cloudai [email protected]:hwb/cloud-ai.git 使用cloudai這個名字代表遠程倉庫

git push cloudai hwb 將當前分支上傳到遠程倉庫的分支。

git remote -v 查看遠程倉庫的連結

git remote rm cloudai 刪除遠程倉庫連結


本地倉庫管理

如果想在自己的電腦上建一個倉庫,自己管理自己的代碼,也備以後使用。可以使用下面的命令:

mkdir projectdir //創建一個目錄
cd projectdir //進入目錄
git init //創建一個倉庫,自動創建master分支
git add . //添加當前文件夾下的所有文件添加到緩存區,手動添加的文件,必有add以後才能被添加到緩存區
git status //查看緩存區和版本庫之間的文件差別
git commit -m "describe" //將緩存區的內容更新到版本庫分支
git branch //查看當前分支
git branch -a //查看所有分支。前面帶*號的代表你當前工作目錄所處的分支
git branch branch-name //當前倉庫添加分支,創建branch-name分支。需要你向裡面添加文件並提交
git checkout branch-name //切換到branch-name分支,那工作區就會只顯示該分支下的文件夾。
git branch -D branch-name //刪除本地分支 git branch --delete branch-name

覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~

文章來源: https://twgreatdaily.com/zh-hk/scsXRm0BJleJMoPMXKi3.html