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详细操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为融合电信云解决方案包括_运营商这“一
- 下一篇: wordpressQQ登陆php代码_W