網站詳情頁怎么做的競價關鍵詞優(yōu)化軟件
這篇博客是尚硅谷2024最新Git企業(yè)實戰(zhàn)教程,全方位學習git與gitlab的完整筆記。
這不僅僅是一套Git的入門教程,更是全方位的極狐GitLab企業(yè)任務流開發(fā)實戰(zhàn)!作為一應俱全的一站式DevOps平臺,極狐GitLab的高階功能全面覆蓋,權威出品,重磅力作,是你學習Git與GitLab的不二之選!
Git與GitLab的企業(yè)實戰(zhàn)
第1章 Git概述
Git是一個免費的、開源的分布式版本控制系統(tǒng),可以快速高效地處理從小型到大型的各種項目。
Git易于學習,占地面積小,性能極快。 它具有廉價的本地庫,方便的暫存區(qū)域和多個工作流分支等特性。其性能優(yōu)于Subversion(svn)、CVS、Perforce和ClearCase等版本控制工具。
1. 何為版本控制
版本控制是一種記錄文件內容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。
版本控制其實最重要的是可以記錄文件修改歷史記錄,從而讓用戶能夠查看歷史版本,方便版本切換。
2. 為什么需要版本控制
個人開發(fā)過渡到團隊協(xié)作。
3. 版本控制工具
- 集中式版本控制工具
CVS、SVN(Subversion)、VSS……
集中化的版本控制系統(tǒng)諸如 CVS、SVN等,都有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協(xié)同工作的人們都通過客戶端連到這臺服務器,取出最新的文件或者提交更新。多年以來,這已成為版本控制系統(tǒng)的標準做法。
這種做法帶來了許多好處,每個人都可以在一定程度上看到項目中的其他人正在做些什么。而管理員也可以輕松掌控每個開發(fā)者的權限,并且管理一個集中化的版本控制系統(tǒng),要遠比在各個客戶端上維護本地數(shù)據(jù)庫來得輕松容易。
事分兩面,有好有壞。這么做顯而易見的缺點是中央服務器的單點故障。如果服務器宕機一小時,那么在這一小時內,誰都無法提交更新,也就無法協(xié)同工作。
- 分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
像 Git這種分布式版本控制工具,客戶端提取的不是最新版本的文件快照,而是把代碼倉庫完整地鏡像下來(本地庫)。這樣任何一處協(xié)同工作用的文件發(fā)生故障,事后都可以用其他客戶端的本地倉庫進行恢復。因為每個客戶端的每一次文件提取操作,實際上都是一次對整個文件倉庫的完整備份。
分布式的版本控制系統(tǒng)出現(xiàn)之后,解決了集中式版本控制系統(tǒng)的缺陷:
-
服務器斷網的情況下也可以進行開發(fā)(因為版本控制是在本地進行的)
-
每個客戶端保存的也都是整個完整的項目(包含歷史記錄,更加安全)
4. Git簡史
5 Git工作機制
6 Git和代碼托管中心
代碼托管中心是基于網絡服務器的遠程代碼倉庫,一般我們簡單稱為遠程庫。
- 局域網
GitLab
- 互聯(lián)網
GitHub(外網)
Gitee碼云(國內網站)
第2章 Git安裝
? 官網地址: https://git-scm.com/或https://github.com/git-for-windows/git/releases
? 查看GNU協(xié)議,可以直接點擊下一步。
選擇Git安裝位置,要求是非中文并且沒有空格的目錄,然后下一步。
Git選項配置,推薦默認設置,然后下一步。
Git安裝目錄名,不用修改,直接點擊下一步。
Git的默認編輯器,建議使用默認的Vim編輯器,然后點擊下一步。
默認分支名設置,選擇讓Git決定,分支名默認為master,下一步。
修改Git的環(huán)境變量,選第一個,不修改環(huán)境變量,只在Git Bash里使用Git。
選擇后臺客戶端連接協(xié)議,選默認值OpenSSL,然后下一步。
配置Git文件的行末換行符,Windows使用CRLF,Linux使用LF,選擇第一個自動轉換,然后繼續(xù)下一步。
選擇Git終端類型,選擇默認的Git Bash終端,然后繼續(xù)下一步。
選擇Git pull合并的模式,選擇默認,然后下一步。
選擇Git的憑據(jù)管理器,選擇默認的跨平臺的憑據(jù)管理器,然后下一步。
其他配置,選擇默認設置,然后下一步。
實驗室功能,技術還不成熟,有已知的bug,不要勾選,然后點擊右下角的Install按鈕,開始安裝Git。
點擊Finsh按鈕,Git安裝成功!
右鍵任意位置,在右鍵菜單里選擇Git Bash Here即可打開Git Bash命令行終端。
在Git Bash終端里輸入git --version查看git版本,如圖所示,說明Git安裝成功。
第3章 Git常用命令
命令名稱 | 作用 |
---|---|
git config --global user.name 用戶名 | 設置用戶簽名 |
git config --global user.email 郵箱 | 設置用戶郵箱 |
git init | 初始化本地庫 |
git status | 查看本地庫狀態(tài) |
git add 文件名 | 添加到暫存區(qū) |
git commit -m “日志信息” 文件名 | 提交到本地庫 |
git reflog | 查看歷史記錄 |
git reset --hard 版本號 | 版本穿梭 |
1 設置用戶簽名
1.1 基本語法
git config --global user.name 用戶名
git config --global user.email 郵箱
1.2 案例實操
全局范圍的簽名設置:
git config --global user.name yhm
git config --global user.email yaohm7788@163.com
git config --list # 查看全局配置
cat ~/.gitconfig # cat linux中查看文本的命令 ~ 家 [你當前用戶的家]/ .gitconfig
說明:
簽名的作用是區(qū)分不同操作者身份。用戶的簽名信息在每一個版本的提交信息中能夠看到,以此確認本次提交是誰做的。Git首次安裝必須設置一下用戶簽名,否則無法提交代碼。
※注意:這里設置用戶簽名和將來登錄GitHub(或其他代碼托管中心)的賬號沒有任何關系。
2 初始化本地庫
2.1 基本語法
git init
2.2 案例實操
結果查看
3 查看本地庫狀態(tài)
3.1 基本語法
git status
3.2 案例實操
(1)首次查看(工作區(qū)沒有文件)
(2)新增文件
(3)再次查看(檢測到未追蹤文件)
4 添加暫存區(qū)
4.1 將工作區(qū)的文件添加到暫存區(qū)
(1)基本語法
git add 文件名
(2)案例實操
4.2 查看狀態(tài)(檢測到暫存區(qū)有新文件)
5 提交本地庫
5.1 暫存區(qū)文件提交到本地庫
(1)基本語法
git commit -m “日志信息” 文件名
(2)案例實操
5.2 查看狀態(tài)(沒有文件需要提交)
6 修改文件(hello.txt)
6.1 查看狀態(tài)(檢測到工作區(qū)有文件被修改)
6.2 將修改的文件再次添加暫存區(qū)
6.3 查看狀態(tài)(工作區(qū)的修改添加到了暫存區(qū))
6.4 將暫存區(qū)文件提交到本地庫
7 歷史版本
7.1 查看歷史版本
(1)基本語法
git reflog 查看版本信息
git reflog -n 數(shù)量
git log 查看版本詳細信息
(2)案例實操
7.2 版本穿梭
(1)基本語法
git reset --hard 版本號
(2)案例實操
–首先查看當前的歷史記錄,可以看到當前是在48f4e22這個版本
–切換到之前版本,8ca80d7版本,也就是我們第一次提交的版本
–切換完畢之后再查看歷史記錄,當前成功切換到了8ca80d7版本
–然后查看文件hello.txt,發(fā)現(xiàn)文件內容已經變化
Git切換版本,底層其實是移動的HEAD指針。
第4章 Git客戶端便捷操作
1. 安裝部署
使用命令行操作git相對而言是非常不方便的,查看內容也不是很直觀,所有官方推薦使用Git的GUI 客戶端來完成頁面化操作。
https://git-scm.com/downloads/guis
? 推薦下載使用GitHub Desktop。下載安裝之后,選擇不登錄先進入頁面。
2. 基礎操作
2.1 設置個人信息
2.2 創(chuàng)建新的Git倉庫
2.3 提交不同版本
新創(chuàng)建文件1.txt,并寫入信息。之后可以在GitGui上面進行提交。
多次提交的版本可以直接在History頁面查看區(qū)別,不需要再使用reset命令。
3. 連接GitHub遠程倉庫
登錄自己注冊的賬號
點擊Publish可以將當前項目創(chuàng)建到GitHub上面。
之后修改本地文件,就可以先推送到本地git之后再遠程同步到GitHub倉庫中。
(1)選擇對應的分支
(2)點擊推送
(3)也可以先在GitHub上面創(chuàng)建遠程倉庫,之后再拉取到本地保持統(tǒng)一。
(4)拉取遠程倉庫到本地
點擊克隆即可,連接完成遠程倉庫和本地Git之后,在本地修改文件提交Git之后再push推送即可完成同步。
3. Gitee替代GitHub
GitHub的網站有時候會連接不上,無法登錄??梢允褂冒⒗锾峁┑腉it遠程倉庫網站Gitee來代替。
登錄賬號之后創(chuàng)建新的倉庫
同步遠程Gitee倉庫的方式和同步GitHub倉庫方法完全一致。
4. idea兼容使用Git(JAVA代碼)
(1)首先在idea中創(chuàng)建一個空的項目
(2)編寫基礎的JAVA代碼Hello world
(3)此時會產生IDEA中的特定文件
(4) 配置Git忽略文件
-
文件名稱:xxxx.ignore(前綴名隨便起,建議是git.ignore)
-
這個文件的存放位置原則上在哪里都可以,為了便于讓~/.gitconfig文件引用,建議也放在用戶家目錄下
-
git.ignore文件模版內容如下
# Compiled class file *.class# Log file *.log# BlueJ files *.ctxt# Mobile Tools for Java (J2ME) .mtj.tmp/# Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid*.classpath .project .settings target .idea *.iml
(5)在.gitconfig文件中引用
(此文件在Windows的家目錄中)
[user]name = yhmemail = yaohm7788@163.com
[core]excludesfile = C:/Users/merge/git.ignore
注意:這里要使用正斜線(/),不要使用反斜線(\)
(6) 定位Git程序
(7)初始化本地庫
(8)提交到本地庫
右鍵點擊項目選擇Git -> Add將項目添加到暫存區(qū)。
(9)切換版本
查看歷史版本
右鍵選擇要切換的版本,然后在菜單里點擊get。
第5章 GitLab的部署與使用
1.為什么使用GitLab-開發(fā)運維一體化
2. 部署安裝GitLab
使用git,還需要一個遠程代碼倉庫。常見的github、gitee這種遠程代碼倉庫,公司中一般不會使用,因為他們是使用外網的,不夠安全。一般企業(yè)都會搭建一個僅內網使用的遠程代碼倉庫,最常見就是 GitLab。
2.1 安裝部署
GitLab一般由公司的運維人員安裝部署,開發(fā)人員只需要申請賬號和相應權限即可,在這里我們在hadoop104上自己安裝GitLab社區(qū)版體驗一下。
2.1.1 安裝準備
1)需要開啟ssh:(已開啟可跳過)
sudo systemctl status sshd
sudo systemctl enable sshd
sudo systemctl start sshd
2)防火墻開放http、https服務:(已關閉防火墻可跳過)
sudo systemctl status firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
2.1.2 rpm 包安裝
1)上傳安裝包
下載地址:https://packages.gitlab.cn/#browse/search/
安裝包較大,建議下載好手動上傳服務器。這里上傳到/opt/software
2)編寫安裝腳本
cd ~/bin
vim gitlab-install.sh
腳本內容如下:
sudo yum install -y curl policycoreutils-python openssh-server perl
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
sudo rpm -ivh gitlab-jh-16.6.1-jh.0.el7.x86_64.rpm
sudo yum install -y postfix
sudo systemctl enable postfix
sudo systemctl start postfix
3)修改腳本執(zhí)行權限并執(zhí)行
chmod +x gitlab-install.sh
sh gitlab-install.sh
**4)**修改external_url
編輯gitlab.rb
[atguigu@hadoop104 ~]$ sudo vim /etc/gitlab/gitlab.rb
在文件中找到external_url,修改為如下內容
external_url 'http://hadoop104'
保存退出
**5)**修改host
編輯gitlab.yml
[atguigu@hadoop104 ~]$ sudo vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml.example
找到gitlab.host修改為如下內容
gitlab:\## Web server settings (**note:** host is the FQDN, do not include http://)host: hadoop104port: 80https: false
保存退出
修改文件名稱
[atguigu@hadoop104 ~]$ sudo mv /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml.example /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
6)重裝需要徹底卸載
1 卸載gitlab
[atguigu@hadoop104 opt]$ sudo rpm -e gitlab-jh-16.6.1
2 刪除gitlab文件
[atguigu@hadoop104 opt]$ sudo rm -rf /etc/gitlab
[atguigu@hadoop104 opt]$ sudo rm -rf /var/opt/gitlab
[atguigu@hadoop104 opt]$ sudo rm -rf /opt/gitlab
3 重裝如果卡在sudo gitlab-ctl reconfigure配置命令上,可以使用另外一個窗口執(zhí)行
sudo systemctl restart gitlab-runsvdir
2.1.3 執(zhí)行初始化
執(zhí)行過程大概需要3分鐘:
sudo gitlab-ctl reconfigure
2.1.4 啟停命令
1)啟動命令
sudo gitlab-ctl start
2)停止命令
sudo gitlab-ctl stop
2.1.5 修改 root 密碼
1)訪問Web頁面
默認使用80端口,直接瀏覽器輸入安裝服務器的hostname或ip:hadoop104
2)查看root密碼
賬號root,密碼將隨機生成并在 /etc/gitlab/initial_root_password 中保存24 小時:
sudo cat /etc/gitlab/initial_root_passwordzOyGe6aBQbkfYf6rOZP2qaWQOAo59K0HMrq9Rs7Yi2w=
修改密碼:
2.1.6 設置簡體中文
回到首頁,可以看到變成中文:
3. 使用GitLab完成團隊管理
去到一家公司,應該是已經有了GitLab平臺,運維人員擁有root管理員賬號。而作為一名普通的開發(fā)人員,你的leader和同事都擁有各自的GitLab賬號和不同權限。入職后,你只需要申請開通GitLab賬號和對應權限,不需要你來操作。
3.1 創(chuàng)建用戶
為了更符合公司實際,我們假設數(shù)據(jù)組的leader賬號為tutou,你是atguigu。
創(chuàng)建一個leader的賬號:
再申請一個atguigu賬號
用戶會收到重置密碼的郵件,也可以由管理員設置:
3.2 創(chuàng)建群組
在gitlab里,可以創(chuàng)建出組、組下的子組。在小公司里可以看見gitlab里邊會創(chuàng)建出后端,大數(shù)據(jù)等等一系列組。盡量不要使用中文創(chuàng)建組名, 可以在組信息中的備注編寫中文描述以及中文組名, 組內人員名稱也盡量用全拼命名。
對于人員權限以及角色的控制也比較簡單,有如下五種:
? Owner:最高權限,誰去創(chuàng)建組,這個組就被誰擁有,它可以開除管理員,但管理員無法操作owner的角色。
? Maintainer:(管理員-只是具備sudo權限的用戶)管理員一般是給小組的組長,或者是給產品線的總監(jiān)設定。
? Developer:是干活的人,就是寫代碼的程序員,可以進行代碼的上傳以及代碼的下載,不能下載其他的組內的代碼,只能下載它們組的代碼。
? Repoter:比如現(xiàn)在有需求,其他組的大牛到我們組過來指導工作,要審視我們的代碼,人家就提出需要一個權限,我不能給它developer因為它會改你代碼,其他組的人不能改我們組的代碼,所以就給一個repoter權限,他只能看,只讀權限。
? guest:不用看,匿名,直接去掉。一般出現(xiàn)在從ldap中把離職人員的信息刪掉,再去gitlab查這個人的時候,它就是一個guest用戶(匿名)需要再到gitlab把它刪掉(不刪也沒事)。
下面,我們假設研發(fā)部群組是rdc,下屬后端組、前端組、大數(shù)據(jù)組等子群組:
1)創(chuàng)建研發(fā)中心群組rdc
2)創(chuàng)建大數(shù)據(jù)組
在研發(fā)中心組下,再創(chuàng)建一個大數(shù)據(jù)組(當然,其他還會有后端組、前端組等):
當然,根據(jù)公司情況還可以進一步在數(shù)據(jù)組下面細分子組(比如:離線、實時、湖等),這里我們就不再細分。
將數(shù)據(jù)組的leader設為bigdata的負責人:
將atguigu添加為普通的開發(fā)人員:
現(xiàn)在我們就有一個頂級群組rdc,其下有一個子群組bigdata,組內有管理員tutou,開發(fā)人員atguigu。
4.使用IDEA兼容GitLab
**1)**安裝 GitLab 插件
2) 配置 SSH 免密登錄
ssh-keygen -t rsa -C ergou@atguigu.com
到用戶目錄下.ssh查看id_rsa.pub文件
添加到GitLab中:
**3)**獲取 GitLab 個人令牌
創(chuàng)建后,可以查看和復制生成的token:
**4)**添加 GitLab 服務
**5)**修改默認分支的保護策略
第6章 企業(yè)項目構建與開發(fā)分支
1. GitFlow工作流介紹
在項目開發(fā)過程中使用 Git 的方式常見的有:
1.1 集中式工作流
所有修改都提交到 Master 這個分支。比較適合極小團隊或單人維護的項目,不建議使用這種方式。
1.2 功能開發(fā)工作流
功能開發(fā)應該在一個專門的分支,而不是在 master 分支上。適用于小團隊開發(fā)。
1.3 GitFlow工作流
公司中最常用于管理大型項目。為功能開發(fā)、發(fā)布準備和維護設立了獨立的分支,讓發(fā)布迭代過程更流暢。
1.4 Forking工作流
在 GitFlow 基礎上,充分利用了 Git 的 Fork 和 pull request 的功能以達到代碼審核的目的。一般用于跨團隊協(xié)作、網上開源項目。
2. 各分支功能介紹
2.1 主干分支 master
主要負責管理正在運行的生產環(huán)境代碼,永遠保持與正在運行的生產環(huán)境完全一致。為了保持穩(wěn)定性一般不會直接在這個分支上修改代碼,都是通過其他分支合并過來的。
2.2 開發(fā)分支 develop
主要負責管理正在開發(fā)過程中的代碼。一般情況下應該是最新的代碼。
2.3 功能分支 feature
為了不影響較短周期的開發(fā)工作,一般把中長期開發(fā)模塊,會從開發(fā)分支中獨立出來。 開發(fā)完成后會合并到開發(fā)分支。
2.4 準生產分支(預發(fā)布分支) release
較大的版本上線前,會從開發(fā)分支中分出準生產分支,進行最后階段的集成測試。該版本上線后,會合并到主干分支。生產環(huán)境運行一段階段較穩(wěn)定后可以視情況刪除。
2.5 bug 修理分支 hotfix
主要負責管理生產環(huán)境下出現(xiàn)的緊急修復的代碼。 從主干分支分出,修復完畢并測試上線后,并回主干分支和開發(fā)分支。并回后,視情況可以刪除該分支。
3. 創(chuàng)建項目與分支管理
首先在Gitlab上面按照項目規(guī)格創(chuàng)建遠程倉庫。
3.1 idea與遠程倉庫連接
3.2 不同分支的提交與合并
(1)新建分支和切換分支
(2)不同分支提交代碼與合并
首先在feature分支編寫第一個模塊的模擬代碼,并提交
package com.atguigu;public class module1 {public static void main(String[] args) {System.out.println("完成第一個模塊的開發(fā)");}
}
(3)合并feature到develop分支
審查測試通過之后,完成合并
第7章 沖突提交
實際單個模塊的開發(fā)往往不是單獨一個人來進行操作,當多個人協(xié)同開發(fā)相同的一個項目時,就會涉及到提交沖突的問題。
1. 不同人修改不同文件
(1)在遠程倉庫添加gitLab.txt
(2)在本地IDEA中添加代碼,繼續(xù)進行第二個模塊的開發(fā)
public class Module2 {public static void main(String[] args) {System.out.println("開始進行模塊2的開發(fā)");}
}
(3)提交代碼到遠程倉庫,此時會有報錯信息
Git會智能識別,采用merge合并命令,拉取遠端文件到本地進行合并。
(4)查看Git提交的全部歷史記錄,可以看到中間有拉取Gitee日志的部分
2. 不同人修改同文件的不同區(qū)域
(1)遠程倉庫修改module1代碼
public class Module1 {public static void main(String[] args) {System.out.println("沒完成模塊1的開發(fā)");}
}
(2)本地IDEA繼續(xù)添加代碼
//添加注釋
public class Module1 {public static void main(String[] args) {System.out.println("完成模塊1的開發(fā)");}
}
(3)提交代碼,之后push到遠程倉庫
同樣可以采用merge命令,git會自動合并不同的區(qū)域代碼。
3. 不同人修改同文件的相同區(qū)域
(1)遠程倉庫添加模塊開發(fā)順利
(2)本地IDEA添加模塊開發(fā)遇到了bug
public class module1 {public static void main(String[] args) {System.out.println("完成第一個模塊的開發(fā)");System.out.println("繼續(xù)進行第一個模塊的二次開發(fā)");System.out.println("模塊開發(fā)繼續(xù)!!!");System.out.println("模塊開發(fā)遇到了bug!");}
}
無法直接采用merge命令,需要人為判斷哪些作為最終的結果來保留
(3)之后需要重新提交到遠程倉庫
4. 同時變更文件名和文件內容
(1)本地IDEA修改原先的文件名稱為Module1plus,之后重新開發(fā)實現(xiàn)功能
//添加注釋
public class Module1plus {public static void main(String[] args) {System.out.println("沒完成模塊1的開發(fā)");System.out.println("模塊1的開發(fā)遇到了bug");System.out.println("完成了模塊1的開發(fā)");System.out.println("進一步完成了模塊1的拓展開發(fā)");}
}
(3)提交代碼修改到遠程倉庫
可以直接提交成功。
5. 不同人把同一文件改成不同的文件名
(1)遠程倉庫把文件名稱改為module1
(2)本地IDEA修改文件名稱為module3
(3)提交到遠程倉庫
(4)需要手動宣傳使用哪一個
push會導致報錯,之后需要用戶自己解決保留哪些文件。
(5)使用命令解決最終的沖突
C:\mybigdata\project\gitlab_demo>git status
#刪除掉報紅找不到的文件
C:\mybigdata\project\gitlab_demo>git rm src/main/java/com/atguigu/Module1Plus.java
(6)最后重新選擇正確的代碼提交到倉庫
第8章 GitLab功能拓展
1. 使用GitLab完成code review
2. CICD部署程序
使用gitLab的自動部署功能,可以快速實現(xiàn)自動部署,完成運行。
3. 安裝gitLab-runner
上傳安裝包之后執(zhí)行
sudo rpm -ivh gitlab-runner-16.6.1-1.x86_64.rpm
之后運行注冊命令
sudo gitlab-runner register
#輸入地址
http://hadoop104
#輸入token
nqaTgGDeJyFsA5fzg8ck
#輸入描述
[hadoop104]: ci
#輸入標簽
ci
#輸入記錄標簽WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://docs.gitlab.com/ee/ci/runners/new_creation_workflow
Registering runner... succeeded runner=nqaTgGDe
#選擇運行模式 -> 使用最簡單的shell
shell
token的位置
注冊完成之后,runner就已經上線了。