日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gitlab 构建tag_Gitlab详细操作

發布時間:2023/12/18 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gitlab 构建tag_Gitlab详细操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考廖雪峰老師的git教程

基本操作

git安裝

在Windows上使用Git,可以從Git官網直接下載安裝程序,默認安裝即可。安裝完成之后會多處git bash和git GUI兩個程序,我們使用git bash 采用命令行的方式進行一系列的操作。

本地git倉庫

1、什么是本地倉庫

版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”

2、本地倉庫的建立

在本地選擇一個目錄,新建文件夾,并在終端打開這個文件夾。

將這個文件夾初始化為倉庫,使用命令 git init 將這個文件夾初始化為git可以管理的倉庫,那么現在我們的這個本地文件夾就變化了Git可以管理的倉庫,在這個文件夾下會有一個隱藏的 .git 文件夾

3、在本地的倉庫添加或者修改文件

在本地的倉庫進行代碼編寫的時候,我們首先要明白git中工作區和暫存區的概念。

工作區

我們在資源管理器里可以看到的文件就是我們的工作區

暫存區

當我們的代碼完成了一個階段,我們想當前的這個版本在本地倉庫進行保存一個版本,也就是commit操作,但是假如我們每次文件修改后都需要進行一次commit,會比較麻煩,所以Git給我們提供了一種方式,就是將修改的文件進行一次add操作,添加到暫存區中,在進行了一些add之后,統一進行commit操作。當然也可以直接每次add之后就進行commit。

git add filename --將文件添加到暫存區

git add . -- 將本地倉庫所有的文件添加到暫存區

git commit -m "提交說明" --使用commit將暫存區的文件進行提交到本地的分支,-m 代表本次的提交說明

4、使用git status查看工作區和暫存區的狀態

當我們在工作區進行了文件的修改和文件的增加的時候,git status會告訴我們發生了什么變化,來幫助我們進行判斷。

遠程倉庫

1、github和gitlab的區別

github和github都是基于git的web代碼倉庫管理軟件。區別主要在于github上的倉庫基本上都是開源的,當然也可以創建私有的代碼倉庫,但是費用比較昂貴。而gitlab是可以在企業內部搭建,可以創建私有的代碼倉庫,除此之外,gitlab還有一些其他的高級特性。相同之處是他們都是基于版本管理系統git,都使用git的命令進行操作。

2、遠程倉庫和本地倉庫的關聯

將本地的倉庫倉庫推送到遠程是比較安全的,當本地代碼出現問題的時候,我們可以很方便在的遠程倉庫上進行代碼的拉取。具體操作如下:

1.如果我們按照上面的步驟已經在本地上建好了一個倉庫,想和遠程倉庫進行關聯,我們首先要在遠程的倉庫上新建一個項目,然后我們使用下面的代碼進行關聯(http方式)

git remote add origin http://github.com/username/learngit.git

username 是遠程倉庫的用戶名,learngit是遠程倉庫的名稱

或者(ssh密鑰方式):

git remote add origin git@github.com:michaelliao/learngit.git

2.關聯的時候有兩種方式來驗證用戶的信息,一種是http方式,一種是ssh密鑰方式,如果想要簡化配置流程,使用http方式即可。

3.在經過了上述的關聯之后,我們下一次進行推動的時候,只需要使用 git push origin master 即可完成推送。origin代表遠程倉庫,master是這個倉庫的一個主分支也是默認分支。但是實際上我們是應該在其他分支上進行開發和推送,在下文會講到。

3、從遠程庫上進行克隆

在遠程倉庫新建項目,使用git clone命令克隆到本地進行開發。這時候本地就會出現一個和項目名稱相同的文件夾,在文件夾下同樣.git文件夾來記錄版本信息,這時候git已經在本地幫我們建立好了一個倉庫。因為我們是直接在git上克隆下來的,所有已經和遠程的倉庫建立了關聯,我們可以直接進行代碼的推送

進階操作

版本回退

當我們在開發的時候,將文件進行添加到暫存區然后提交到本地的版本庫。版本庫會將我們每一次的操作來進行一次存檔。那么久方便我們很容易回退到某個版本。

我們可以使用 git diff HEAD -- filename 命令可以查看工作區和版本庫里面最新版本的區別,如果確定需要回退,那就按照下述的方式來進行回退。我們分幾個情境來進行版本回退

1、當前編輯的文件還沒有提交到暫存區

如果只是做了簡單的修改,我們可以手動恢復到我們想要的狀態,但是加入修改過多,已經忘記自己修改了什么內容,那么使用

git checkout -- file 可以丟棄工作區的修改,在這里可能有兩種情況:

一種是file自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。簡單說就是讓這個文件回到最近一次git commit或git add時的狀態。

2、文件已經提交到了暫存區但是并沒有提交到本地的版本庫

git reset HEAD 可以把暫存區的修改撤銷掉(unstage),重新放回工作區。git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。

使用checkout 就可以丟棄工作區的修改了。

3、已經將文件存儲到暫存區并提交到了本地版本庫

當我們進行回退的時候,要知道我們要回退到哪個版本,在git中使用HEAD表示當前的版本,那么如果要是回退到上個版本的話就是使用: git reset --hard HEAD^ 我們的版本就會被還原到上一個版本,使用HEAD^可以回退到上上一個版本,當然==再往上100個版本寫100個比較容易數不過來,所以寫成HEAD~100。

在使用git reset的時候,有兩個參數可以選擇,分別是git reset --hard/soft,hard和soft的主要區別在于,soft只是回退了commit的信息,也就是指向之前的commit信息,但是對應的文件并不會發生改變。而使用hard方式commit信息會指向之前的信息,同時在工作區的文件也會跟隨者進行變化。

4、當我們回退后又想前進到回退前的版本,git也提供了對應的操作方式

我們可以使用 git reflog 命令查看操作記錄,來判斷我們要回到哪個版本。

刪除文件恢復

在git中,刪除也是一個修改操作,一般會有以下兩種操作。

1、誤刪除文件(已經add或者已經commit)

在本機上將文件進行刪除后,我們介可以使用git status檢測到文件的變動。但是原來的文件必須是已經add操作的

使用git checkout -- 誤刪除文件名稱,和上文介紹的恢復工作區狀態的指令相同。

2、確定要刪除文件

當我們在資源管理器將某個文件刪除,使用git status 會提示我們使用 git rm 進行刪除文件

使用 git rm (文件名稱 然后進行commit

當然也可以使用git add . 來添加全部修改或新增的文件

注意,當我們沒有進行add 和commit操作的時候我們是無法從原來的版本庫進行恢復的,也就是直接新建一個文件,沒有經過任何操作,是無法恢復的。

分支管理

分支管理的目的就是將當前已經可以發布模塊放在一個分支,在另外一個分支進行進一步開發,開發完成后可以進行分支合并。

在gitlab上默認的分支是master(主分支),也只有這一個分支,其他分支需要開發人員自行建立。

主要操作如下

指令

功能

git branch

查看分支(*指向的為當前的分支)

git branch

創建分支

git checkout

切換分支

git checkout -b

創建加切換分支

git merge

合并某分支到當前分支

git branch -d

刪除分支

1、創建與合并分支

創建分支

在本地新建dev分支并指向dev分支后,這時候倉庫下的文件更改都是在dev分支下的操作,當進行修改后,可以推送到遠程的dev分支,如果遠程沒有dev分支,git會幫助我們新建dev分支并將文件推送。其他開發者在自己的本機建立dev分支,也向遠程的dev分支進行推送(后面介紹本地dev分支和遠程dev分支相連以及沖突的解決)。

合并分支

切換到master分支之后,將dev分支合并到當前的master分支,合并完成后,git會提示我們當前分支比遠程的分支超前一個。

切換分支.png

合并圖解如下:

新建dev分支,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:

新建分支.png

新提交一次后,dev指針往前移動一步,而master指針不變:

dev分支提交.png

合并dev分支,git的方式是將master指向dev分支

合并dev分支.png

在遠程倉庫進行合并的方式

在實際的開發中,一般master主分支是受保護的,也就是說只有項目的負責人才有權限在master分支上進行相關的操作,其他普通開發者只能向dev分支進行推送,那么普通開發者怎么才能讓負責人知道自己可以合并分支,這就需要在gitlab的dev分支界面發起合并請求,負責人收到請求后開始合并。

2、分支沖突的解決

本地沖突

當我們在本地使用master分支合并dev分支的時候出現沖突,如下圖

合并分支沖突.png

使用git status 也可以查看沖突

查看沖突.png

使用cat命令查看沖突,Git用<<<<<<>>>>>>標記出不同分支的內容

解決沖突.png

其中HEAD代表當前的代碼,>>>>代表其他版本沖突的代碼,我們打開沖突的文件,將代碼沖突進行修改之后,將HEAD,>>>等標志刪除之后重新進行提交即可。

查看解決之后的文件.png

提交完成后重新進行合并

重新合并.png

遠程推送出現沖突

當我們的本地的分支推送到遠程的分支的時候,可能遠程上的分支已經進行了修改,那么我們將會push失敗,解決方案是:

1.從遠程的分支上拉最新的分支 git pull

2.在拉取完成后,會自動提示我們沖突的文件,我們按照相同的方式進行修改后重新提交推送即可。

3、分支合并的模式

有兩種常用的合并分支的方式

1、快速合并方式

如果待合并的分支在當前分支的下游,也就是說沒有分叉時,會發生快速合并,git會提示我們此次合并是快速合并。

image.png

這種方法相當于直接把master分支移動到test分支所在的地方,并移動HEAD指針。

2、普通合并方式

如果我們不想要快速合并,那么我們可以強制指定為非快速合并,只需加上--no-ff參數,普通合并實質上是在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。所以需要我們添加commit描述

image.png

3、兩種合并方式對比

下圖中第二、三次提交是快速合并,都是基于dev分支提交,但在查看log信息的時候,看不出來是合并操作,緊接著我們在dev分支繼續修改,然后使用普通合并模式進行修改,這次可以發現分支圖上顯示我們的操作流程,在dev分支進行修改,在master分支進行合并。推薦在合并的時候使用普通合并。

image.png

4、分支管理策略

實際開發時,應該按照以下幾個原則進行開發

1、master分支應該是非常穩定的,也就是僅用來發布新版本,平時不在上面干活

2、干活都在dev分支,也就是說Dev分支是不穩定的,到某個時候,比如發布版本的時候,將dev分支合并到master上,在master分支發布版本

3、開發者可以在dev分支上開發,每個人都有自己的分支,最后往dev分支合并就可以了

4、合并分支的時候,加上--no-ff參數就可以用普通模式合并,合并后的歷史有分支,可以看出曾經做過合并,而fast forward則看不出來

標簽管理

發布一個版本時,我們通常先在版本庫中打一個標簽(tag),這樣,就唯一確定了打標簽時刻的版本。將來無論什么時候,取某個標簽的版本,就是把那個打標簽的時刻的歷史版本取出來。所以,標簽也是版本庫的一個快照。我們在發布一個版本的時候,會對應有一個commit, 但是這個commit可能是比較難記的,所以我們選擇一個好記憶的方式tag,例如v1.0 與某個commit綁定。

在Git中打標簽非常簡單,首先,切換到需要打標簽的分支上:

然后,敲命令git tag 就可以打一個新標簽:

git tag v1.0

可以用命令git tag查看所有標簽:

$ git tag

v1.0

默認標簽是打在最新提交的commit上的。有時候,如果忘了打標簽,比如,現在已經是周五了,但應該在周一打的標簽沒有打,怎么辦?方法是找到歷史提交的commit id,然后打上就可以了:

git tag v0.9 f52c633

協同開發實例

項目負責人在遠程倉庫新建了倉庫,克隆到本地,新建dev分支并推送到遠程,那么遠程倉庫也就有了dev分支。

在克隆結束倉庫之后,最好在本地這個倉庫使用本地 set 的方法設置 gitlab 用戶名和email(如果本機沒有GitHub的環境可以忽略)

git config —local user.name ‘XXX’ git config —local user.email ‘xxx@dist.com.cn

設置完之后可以使用git config --list 查看

設置完成之后將本地文件推到遠程dev

其他開發人員從遠程倉庫克隆倉庫到本地,在本地新建dev分支并直接切換到dev分支,然后將服務器上的dev版本使用git pull 命令拉下來,這樣本地就具有了一個dev的開發環境,之后就在dev上進行開發和push(同樣進行一下local的配置)

本地dev開發完成之后,push到遠程dev,如果和遠程有沖突,會出現下圖的情況

這時候我們需要將遠程的dev分支上的文件拉下來,git會提示我們什么地方出了問題,git pull相當于自動的 fetch 和 merge 操作,會試圖自動將遠程庫合并入本地庫,在有沖突時再要求手動合并,git fetch 只是將遠程的文件拉下來,不會與本地的分支進行合并,而pull的操作時將遠程的代碼拉取下來并與本地的分支進行合并。

git提示我們 這是dev分支.txt 有沖突,那么我們就針對這個文件進行修改,其中HEAD代表當前的代碼,>>>>代表其他版本沖突的代碼,我們打開沖突的文件,將代碼沖突進行修改之后,將HEAD,>>>等標志刪除之后重新進行提交即可。

修改完沖突之后進行add和commit,最后push到云端沒有問題

常見問題的解決

git推送到遠程錯誤的文件怎么處理

先回退到前一個版本:

git reset --hard HEAD^

然后強制推送當前這個版本到云端

git push origin HEAD --force

從遠程pull數據時候存在沖突怎么解決?

出現這種問題的原因是遠程上已經存在的代碼和我們本地的代碼,因為代碼沖突并不止是存在于向遠程推送時會發生。解決方式時根據提示,找到錯誤的文件,進行修改即可。要注意pull的意義就是為了在本地進行代碼合并,來避免推送到遠程的時候出現代碼沖突。

總結

以上是生活随笔為你收集整理的gitlab 构建tag_Gitlab详细操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。