首页 > 其他分享 >Git就业实战篇

Git就业实战篇

时间:2024-08-02 16:40:01浏览次数:21  
标签:实战篇 git 代码 就业 Arc Git TestRepo main 分支

第一章 版本控制系统

1.1 SVN 集中式版本控制系统

​ 所有的代码版本都存放在 SVN Server 上,网络有问题就访问不了,所有内柔都在SVN Server上进行,Client只负责请求,协作必须在本地局域网开发。

image-20240704122615774

1.2 GIT 分布式版本控制系统

​ 每个客户端都有一个仓库,独立开发。

image-20240704122855453

第二章 Git的基本内容回顾

2.1本地与远端仓库通信

​ 以GitHub为例实现本地仓库与远程仓库的通信,随便创建一个远程仓库:

image-20240704124147331

​ 安装Git设置提交代码的签名(用户名密码)和SSH密钥

git config --global user.name "" 
git config --global user.email ""
ssh-keygen -t rsa -C "注册账号的邮箱名字"

image-20240704124547376

​ 生成的密钥的正常情况(全部默认)生成在C:\Users\用户名\.ssh下,复制id_rsa.pub(公钥)中的内容,

image-20240704124848195

​ 测试是否和GitHub联通,如果有报错$ ssh: Could not resolve hostname github.com: Name or service not known请检查自己的网络代理设置。

image-20240704125314832

2.2 回忆Git的命令

image-20240704181853873

2.2.1 git clone

​ 使用git clone 仓库地址将远程分支 Clone 到本地

​ 在拉取到本地之后默认会将远程仓库的名称设置为origin

​ 生成本地默认一个主干分支master追踪origin/master(或main分支)

image-20240704130442019

image-20240704131117611

2.2.2 向远程仓库推送代码的流程

image-20240704181350099

2.2.3 git 各个阶段修改回退撤销操作

image-20240704184626941

2.3 冲突解决

​ 当本地分支与远端分支不同步(提前或者落后n个提交),在进行 push 的时候就回无法推送。

image-20240728235216995

image-20240728235316419

2.3.1 修改的不同位置的代码

​ git 会智能合并

image-20240729002350577

2.3.2 修改相同位置的代码

​ 需要手动进行修改,修改之后需要在进行 commit ,以便让 git 保存完整的提交更改。

image-20240729000027714

[root@localhost TestRepo]# cat README.md 
<<<<<<< HEAD
B更改了Readme
=======
This is A
>>>>>>> c9d153de333f310ba9af1945c64026de42238b73
    
// 去掉Git生成的提示,手动更改代码,在前人的基础上修改内容

This is A ,B也干了,还解决了冲突

[root@localhost TestRepo]# vim README.md 
[root@localhost TestRepo]# gitstatus
bash: gitstatus: 未找到命令...
[root@localhost TestRepo]# git status 
# 位于分支 main
# 您的分支和 'origin/main' 出现了偏离,
# 并且分别有 1 和 1 处不同的提交。
#   (使用 "git pull" 来合并远程分支)
#
# 您有尚未合并的路径。
#   (解决冲突并运行 "git commit")
#
# 未合并的路径:
#   (使用 "git add <file>..." 标记解决方案)
#
#	双方修改:     README.md
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@localhost TestRepo]# git add .
[root@localhost TestRepo]# git status 
# 位于分支 main
# 您的分支和 'origin/main' 出现了偏离,
# 并且分别有 1 和 1 处不同的提交。
#   (使用 "git pull" 来合并远程分支)
#
# 所有冲突已解决但您仍处于合并中。
#   (使用 "git commit" 结束合并)
#
# 要提交的变更:
#
#	修改:      README.md
#
[root@localhost TestRepo]# git commit -m "B解决冲突"
[main 742e7a4] B解决冲突
[root@localhost TestRepo]# git push

2.4 本地分支管理

2.4.1 本地分支创建和合并

​ 列出大致拉取代码到本地 -> 创建本地分支 -> 合并分支 -> 完成推送这一流程的时间线。下面的示例中是将dev分支合并到mian分支上在进行推送的,如果想直接将dev分支的内容推送到mian上面,则需要指定远端的分支(因为本地签出的分支并不追踪远端)即git push origin dev:master;若创建的本地分支有内容未合并,在删除时需要进行强制操作,即git branch -D devBranchA

// 1、创建本地分支
Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (main)
$ git checkout -b devBranchA
Switched to a new branch 'devBranchA'
// 2、进行开发
Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (devBranchA)
$ vim README.md
// 3、提交更改到本地
Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (devBranchA)
$ git status
On branch devBranchA
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (devBranchA)
$ git add .

Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (devBranchA)
$ git commit -m "A在自己分支上写的"
[devBranchA a4efd3b] A在自己分支上写的
 1 file changed, 3 insertions(+)
// 4、返回main分支合并更改
Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (devBranchA)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (main)
$ git merge devBranchA
Updating 71591b3..a4efd3b
Fast-forward
 README.md | 3 +++
 1 file changed, 3 insertions(+)
 // 5、推送更改到远端
 Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 379 bytes | 379.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To github.com:Purearc/TestRepo.git
   71591b3..a4efd3b  main -> main
// 6、删除不再需要的分支
Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (main)
$ git branch -d devBranchA
Deleted branch devBranchA (was a4efd3b).

2.4.2 本地分支合并冲突解决方案

分支的冲突同样也是分为Auto MergeAuto Merge failed两种,后者需要手动进行更改。

image-20240729224239107

​ 下面是整个的流程,经常从远端 pull 同步代码是个好习惯。

B:
git pull
// 获得V1版本的代码
// 进行开发并推送自己的更新到远端
git push

A:
git pull
// 1、获得V1版本的代码
git checkout -b dev
// 2、完成功能开发合并代码 
git merge
git push
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0), pack-reused 0
Unpacking objects: 100% (11/11), 1.37 KiB | 31.00 KiB/s, done.
From github.com:Purearc/TestRepo
   f27b0ea..9e255a3  main       -> origin/main
Auto-merging Application.java
CONFLICT (content): Merge conflict in Application.java
Automatic merge failed; fix conflicts and then commit the result.
// 3、手动解决冲突
git add
git commit->git push

image-20240729224428163

​ 需要手动解决冲突的示例:

// 这是一个启动类
@SpringBootApplication()
@Aspect

// 这是一个启动类
@SpringBootApplication

// 这是一个启动类
<<<<<<< HEAD
@SpringApplication()
@Aspect
=======
@SpringBootApplication
>>>>>>> 9e255a33b02fff50131758f7bb9101ae997eafa0

image-20240729224509204

2.5 远程分支管理

在远端创建一个新的分支之后 pull 一下就可以看到远端分支已经更新,但是本地没有分支跟踪,通过git checkout -b 本地分支 origin/远端分支就可以完成创建并跟踪,也可以在本地的某个分支使用git checkout -u origin/本地分支进行后期追加跟踪。

Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (main)
$ git pull
From github.com:Purearc/TestRepo
 * [new branch]      dev        -> origin/dev
Already up to date.

Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (main)
$ git checkout -b dev origin/dev
Switched to a new branch 'dev'
branch 'dev' set up to track 'origin/dev'.

Arc@Arc MINGW64 /d/GitLocalRepo/TestRepo (dev)
$ git branch -vv
* dev    aad1a91 [origin/dev] B更改了Application
  devEnv c501fc0 A的更改落后于B
  main   8d170a9 [origin/main: ahead 2] A解决冲突

2.6在IDEA或Github Desktop上使用Git

第三章 Git的工作流

​ 在我们的开发流程中,我们采用了一种结构化的Git工作流,以确保代码的稳定性和可持续性。首先,我们从稳定的master分支创建一个dev分支,用于日常开发。开发完成后,从dev分支中拉出一个release分支,用于准备和测试新版本。在所有测试通过后,将release分支的代码合并回master分支,标志着版本的发布。之后,我们开始新一轮的开发,再次从master分支创建dev分支,如此循环往复,确保每个版本的迭代都有条不紊。

​ 以下图为例,大体流程为

image-20240801001851021

1、创建个人本地开发分支:git checkout-b feature/add_new_line origin/dev
2、个人本地分支推送到远程分支:git push origin feature/.add_new_line:feature/add_new_line
3、提交个人远程代码分支和目标代码合入分支的MR,相关负责人进行CR
4、相关负责人提出意见,本地修改相应的代码,推送到对应的远程代码分支上
5、代码CR意见处理完,相关负责人进行代码merge,代码修改从feature/add_new_Line合入dev分支完成
5、删除个人远程代码分支

第四章 使用极狐GitLab

4.1 安装部署

​ 关于安装官网上有详细的教程,园子上也有很多大佬写的很全面,跑起来之后默认会给一个root用户,密码会存在 /etc/gitlab/initial_root_password,更改密码登入进入主页面:

注:个人头像->Preferences->Localzation更改语言选项

image-20240801005806238

4.1.1 创建和管理用户

主页 -> 配置GitLab -> 用户

​ 常用的用户角色有

Root 用户:Root 用户是 GitLab 实例的超级管理员,拥有最高权限,可以进行任何操作,包括管理其他用户、组和项目设置。

管理员用户:管理员用户也有很高的权限,可以管理整个 GitLab 实例,但权限略低于 Root 用户。管理员可以创建和管理组、项目,并管理用户的权限。

普通用户:普通用户的权限是最基本的,他们通常只对自己参与的项目和组有访问和操作权限。普通用户可以在他们有权限的项目中进行代码提交、代码审核和创建合并请求等操作。

image-20240801172358961

​ 创建的用户时密码会发送到注册时填写的邮箱。

image-20240801234444750

4.1.2 创建和管理群组

主页边栏 -> 项目 -> 创建群组

群组的可见性级别有:

私有:群组及其项目只能由成员查看。

内部:除外部用户外,任何登录用户均可查看该群组和任何内部项目。

公开:群组和任何公开项目可以在没有任何身份验证的情况下查看。

image-20240801234800312

​ 在gitlab里,可以创建出组、组下的子组。在小公司里可以看见gitlab里边会创建出后端,大数据等等一系列组。尽量不要使用中文创建组名, 可以在组信息中的备注编写中文描述以及中文组名, 组内人员名称也尽量用全拼命名。

​ 对于人员权限以及角色的控制也比较简单,有如下五种:

Owner:最高权限,谁去创建组,这个组就被谁拥有,它可以开除管理员,但管理员无法操作owner的角色。

Maintainer:(管理员-只是具备sudo权限的用户)管理员一般是给小组的组长,或者是给产品线的总监设定。

Developer:是干活的人,就是写代码的程序员,可以进行代码的上传以及代码的下载,不能下载其他的组内的代码,只能下载它们组的代码。

Repoter:比如现在有需求,其他组的大牛到我们组过来指导工作,要审视我们的代码,人家就提出需要一个权限,我不能给它developer因为它会改你代码,其他组的人不能改我们组的代码,所以就给一个repoter权限,他只能看,只读权限。

guest:不用看,匿名,直接去掉。一般出现在从ldap中把离职人员的信息删掉,再去gitlab查这个人的时候,它就是一个guest用户(匿名)需要再到gitlab把它删掉(不删也没事)。

image-20240801171602711

​ Owner 可以拉人进来,为拉进入群组的人分配角色:

image-20240801235249393

4.1.3 使用IDEA兼容GitLab

生成ssh密钥并添加

image-20240802000033396

​ 创建个人访问令牌用于在idea中登录gitlab

image-20240802000241986

image-20240802004532828

​ 在管理员权限修改默认分支保护(默认是不允许合并到master上的)

image-20240802004852486

第五章 企业项目构建与开发分支

1. GitFlow工作流介绍

在项目开发过程中使用 Git 的方式常见的有:

1.1 集中式工作流

所有修改都提交到 Master 这个分支。比较适合极小团队或单人维护的项目,不建议使用这种方式。

image-20240802163033006

1.2 功能开发工作流

功能开发应该在一个专门的分支,而不是在 master 分支上。适用于小团队开发。

image-20240802163052638

1.3 GitFlow工作流

公司中最常用于管理大型项目。为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。

image-20240802163105647

1.4 Forking工作流

在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。一般用于跨团队协作、网上开源项目。

image-20240802163124197

2. 各分支功能介绍

image-20240802163156865

2.1 主干分支 master

主要负责管理正在运行的生产环境代码,永远保持与正在运行的生产环境完全一致。为了保持稳定性一般不会直接在这个分支上修改代码,都是通过其他分支合并过来的。

2.2 开发分支 develop

主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。

2.3 功能分支 feature

为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。 开发完成后会合并到开发分支。

2.4 准生产分支(预发布分支) release

较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。

2.5 bug 修理分支 hotfix

主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修复完毕并测试上线后,并回主干分支和开发分支。并回后,视情况可以删除该分支。

第六章 GitLab的拓展功能

7.1 Code Review

image-20240802163321806

7.2 CICD部署程序

Gitlab-CICD最简单明了的入门教程 - 狮子挽歌丿 - 博客园 (cnblogs.com)

GitLab-CI/CD入门实操 - 莱布尼茨 - 博客园 (cnblogs.com)

标签:实战篇,git,代码,就业,Arc,Git,TestRepo,main,分支
From: https://www.cnblogs.com/purearc/p/18339072

相关文章

  • JAVA后端拉取gitee仓库代码项目并将该工程打包成jar包
    公司当前有一个系统用于导出项目,而每次导出的项目并不可以直接使用,需要手动从gitee代码仓库中获取一个模板代码然后将他们整合到一起它才是一个完整的项目,所以目前我的任务就是编写一个java程序可以自动地从gitee仓库拉取下来那个模板代码到指定地路径上去。并且我还要将这个ja......
  • Google 推出 Gemma 2 2B 端侧模型;Github 新服务帮助开发者选择 AI 模型 丨 RTE 开发者
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点......
  • GitHub Models服务允许开发人员免费查找和试用AI模型
    今天,GitHub宣布推出一项新服务–GitHubModels,允许开发人员免费查找和试用人工智能模型。它将领先的大型和小型语言模型的强大功能直接带给GitHub的1亿多用户。GitHub模型将提供对领先模型的访问,包括OpenAI的GPT-4o和GPT-4omini、微软的Phi3、Meta的Llama3.......
  • 解决国内 github.com 打不开进不去的方法
    解决国内github.com打不开进不去的方法修改host文件电脑的hosts文件在下面这个地址,找到hosts文件C:\Windows\System32\Drivers\etc右键点击hosts文件,选择复制,然后粘贴到桌面上。右键点击桌面上的hosts文件,选择“用记事本打开该文件”,hosts文件中需要写入下面的访......
  • GitHub Star 数量前 15 的开源低代码项目
    上周,我们发布了文章《GitHubStar数量前12的开源无代码工具》,收获了许多喜爱。许多朋友留言问,为什么n8n、Appsmith等熟知的产品没有上榜?原因是我们是根据GitHub上的"no-code"标签来制作这份名单的,而这两款产品只打上了“low-code”标签。今天这篇文章,我们将盘点低代码......
  • Git 入门到精通:新手的 Git 使用完全指南
    Git配置首先,你需要设置Git的全局用户名和邮箱地址,这将影响你电脑上所有Git仓库的默认设置。gitconfig--globaluser.name"YourName"gitconfig--globaluser.email"[email protected]"如果你只想为当前仓库设置用户身份,可以省略--global标志。2.创建代......
  • Git同步两个远程仓库的分支代码
    背景:有两个项目A、B【在不同的代码仓库】,B是基于A开发的,经过一定时间的迭代,B有了一些定制化功能,现在要把B项目定制化功能都同步到项目A。同步两个远程仓库的分支代码最终是同步两个分支的代码。在同一个仓库,同步代码就是同步不同分支代码。一般就通过rebase操作即可。同步......
  • 为git设置代理
    为git设置sock5代理为git设置sock5代理gitconfig--globalhttp.proxy'socks5://127.0.0.1:7891'#改成自己的端口gitconfig--globalhttps.proxy'socks5://127.0.0.1:7891'#查看是否成功gitconfig-l#查看git的所有配置#取消代理gitconfig--globalunsetht......
  • GitHub每日最火火火项目(7.31)
    1. 项目名称:opendatalab/MinerU项目介绍:MinerU是一个一站式开源高质量数据提取工具,支持PDF/网页/多格式电子书提取。它能够帮助用户从各种来源中高效地获取所需的数据,为数据处理和分析提供便利。该工具的开源性质使得用户可以根据自己的需求进行定制和改进,同时也促进了社......
  • 本地同时配置github 和gitee 远程仓库
    在当下,gitee也成为国内很多开发人员交友社区。同时为了跟上时代的步伐,大家也不想放弃github。所以同时将自己的项目提交到gitee和github成了开发人员的诉求。git全局用户设置##产看全局配置gitconfig--global--list#清除(如果未添加过,则不需要清除)gitconfig--glo......