35-Git

本文详细介绍Git版本控制系统的基础知识,包括安装、基本操作、远程仓库管理、分支管理等内容,并结合IDEA进行实操演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

35-Git笔记-qianfeng-笔记


文章目录


在这里插入图片描述

一、Git简介

①:项目的版本管理

在项目开发过程中,项目没开发到一个节点就会对当前项目进行备份,这个备份就是项目的一个版本;当我 们继续开发一个阶段后,再次进行备份,就生成新的版本一一多个版本的集合就是项目的版本库

在项目版本管理中,我们可以使用手动进行管理,但是存在一些问题:

  • 需要手动维护版本的更新日志,记录每个版本的变化
  • 需要手动查找历史版本,当历史版本比较多的时候,查找工作很繁琐
  • 当我们需要回退到某个版本时,只能够手动的通过DE工具手动打开

②:团队协同开发

在这里插入图片描述

③:版本管理工具—Git

Git是以恶搞开源的分布式版本控制系统,用于敏捷高效的处理任何大小项目的版本管理

核心功能

  • 项目的版本管理
  • 团队协同开发

二、Git下载及安装

①:下载

官网:https://git-scm.com/
在这里插入图片描述

②:安装

除了选择安装位置以外,其他都傻瓜式安装

③:检查安装

  • win + R
  • git --version

在这里插入图片描述

三、Git架构

在这里插入图片描述

四、Git基本使用

①:创建版本库

  • 在工作空间的目录中,右键“Git Bash Here”打开git终端
  • 在Git终端中输入git init指令,创建版本库(就是一个.git目录)
    在这里插入图片描述

指令:git init

在这里插入图片描述

②:查看版本状态

git status

③:将工作空间的修改添加到暂存区

git add a.txt 只将工作空间中的某个文件add到暂存区
git add· 将工作空间中所有文件都add暂存区

在这里插入图片描述

④:将暂存区内容提交到版本库(仓库)

git commit -m ‘版本说明(描述)’

在这里插入图片描述

⑤:查看

git log 查看每个版本的详细信息
git log --oneline 每个版本只显示一行信息

在这里插入图片描述

⑥:设置用户信息

git config --global user.name 'Coke666' 设置用户名
git config --global user.email 'coke@haha.com' 设置用户邮箱

在这里插入图片描述

在这里插入图片描述

⑦:同步历史版本到工作空间

git add . 添加到暂存取
git commit -m '版本日志(描述)' 提交
git log --oneline 查看版本信息

在这里插入图片描述> git checkout 版本号

在这里插入图片描述

注意 : 只能查看当前版本之前的信息

在这里插入图片描述

不过 可以回到最新版本, 但是要记住版本号!!!!

在这里插入图片描述

五、远程仓库

①:远程仓库介绍

远程仓库,远程版本库; 实现版本库的远程存储,以实现团队的协同开发

远程仓库
在这里插入图片描述

②:如何获得远程仓库?

③:创建远程仓库(码云)

1. 注册(注册步骤略~)
在这里插入图片描述
2. 创建仓库
在这里插入图片描述
仓库地址: https://gitee.com/c-coke/git-demo.git
在这里插入图片描述
3. 添加协同开发人员
在这里插入图片描述

六、远程仓库操作

①:准备工作

  1. 创建本地工作空间

     D:\OOP\java\develop_idea\04_git\01_gitDemo 
     	src
     		main 
     			java 
     			resources
     		test 
     			java 
     	pom.xml
    

在这里插入图片描述
2. 初始化本地仓库

git init

在这里插入图片描述

  1. 将工作空间搭建的项目结构add到暂存区

     git add .
    

在这里插入图片描述

  1. 将暂存区文件提交到版本库,生成第一个版本

     git commit -m '创建项目'
    

在这里插入图片描述

  1. 为当前项目创建一个远程仓库

     远程仓库地址: https://gitee.com/c-coke/01_git-demo.git
    

在这里插入图片描述

②:本地仓库关联远程仓库并查看

建立D:\OOP\java\develop_idea\04_git\01_gitDemo 的本地仓库与 远程仓库https://gitee.com/c-coke/01_git-demo.git的关联

git remote add origin https://gitee.com/c-coke/01_git-demo.git    关联远程仓库

git remote -v			查看远程仓库的状态

在这里插入图片描述

③:将本地仓库push到远程仓库

	git push origin master        origin 远程仓库的别名   master 远程仓库分支名

在这里插入图片描述

在这里插入图片描述

在本地仓库中新建文件

  • main\java 新建 HelloWorld.java
  • main\resources 中新建一个img文件夹并在该文件夹中存一张照片
  • 添加到暂存区 → 提交 → push到远程仓库

在这里插入图片描述
在这里插入图片描述

④:其他开发者pull远程仓库到本地

  1. 直接从远程仓库上传文件(模拟其他开发人员提交的代码)

在这里插入图片描述

指令 :git pull https://gitee.com/c-coke/01_git-demo.git master

在这里插入图片描述

⑤:解决协同开发冲突问题

1. 模拟其他开发人员修改信息
在这里插入图片描述
2.在本地也修改HelloWorld.java中的内容 👉并添加👉提交
在这里插入图片描述
3. 当push到远程仓库时会报错(冲突)
在这里插入图片描述
4.解决冲突问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

出现以下问题解决方法
在这里插入图片描述

⑥:从远程仓库拉取报错

在这里插入图片描述

七、分支管理

在这里插入图片描述

①:分支介绍

分支就是版本库中记录版本位置(支线),分支之间项目不影响,使用分支可以对项目起到保护作用
分支就是一条时间线,每次提交就在这条时间线上形成一个版本

②:分支特性

  • 创建一个新的版本库,默认创建一个主分支-master分支
  • 每个分支可以进行单独管理(常规分支、保护分支、只读分支)
  • 分支是可以合并的

③:分支操作

01.创建分支

创建分支:git branch 分支名
在这里插入图片描述

02.查看分支

在这里插入图片描述

查看分支:gti branch
在这里插入图片描述

03.切换分支

切换分支:git checkout 分支名
在这里插入图片描述

04.删除分支内容

提交删除信息:git commit -a -m '描述
在这里插入图片描述

05.检出分支

检出分支:git checkout 版本号 -b 分支名
在这里插入图片描述

06.合并分支1(三方合并)

1.先在dev2分支下新建一个文件(master主分支没有的文件)
在这里插入图片描述
2.切换回主分支(master)
在这里插入图片描述
3.合并分支:git merge 分支名
在这里插入图片描述

07.合并分支2(快速合并)

1.在master分支下新建dev3分支并在该分支下新建dev3.txt文件
在这里插入图片描述
2.切换会master分支
在这里插入图片描述
3.在master分支下合并dev3分支
在这里插入图片描述

08.三方合并和快速合并的区别

在这里插入图片描述

09.删除本地分支

git branch -d  local_branch_name
git branch 是在本地删除分支的命令。
-d 是一个标志,是命令的一个选项,它是--delete. 顾名思义,
它表示您要删除某些内容。-local_branch_name是要删除的分支的名称。

④:企业分支模型

在这里插入图片描述

八、标签操作

在这里插入图片描述在这里插入图片描述

①:创建新标签并推送到远程仓库

在这里插入图片描述

②:检出标签(下载)

多个标签切换对比

1. 创建新的文件
在这里插入图片描述
2. 创建一个新的标签并推到远程仓库
在这里插入图片描述 在这里插入图片描述
3. 检出标签(检出标签必须创建一个新的分支)
在这里插入图片描述

九、IDEA整合Git使用

作为Jva开发工程,我们代码的编写工作都是在lDE工具(idea)中完成,因此我们需要了解和掌握直接使用IDE工具完成Git的操作

①:IDEA关联Git

1.使用Settings for New Projects 永久设置
在这里插入图片描述
在这里插入图片描述

②:IDEA中Git版本管理

01.准备工作

准备工作

1.创建一个新的web项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

02.创建本地版本库

创建版本库
在这里插入图片描述
在这里插入图片描述

03.设置忽略文件(不需要提交的文件)

在工作空间中有些文件是不需要记录到版本库中的(例如.idea、target、iml文件),可以通过设置忽略提交 来实现

  • 在工作空间的根目录(项目的根目录)中创健一个名为.g1 tignore文件
  • 在.g1t1 gnore文件配置忽略过滤条件
在这里插入图片描述

04.将工作空间add到暂存区

1. 选择项目文件-右键-Git-Add(添加到暂存区的文件-绿色)
在这里插入图片描述
在这里插入图片描述
2. 如果一个文件创建好之后还没有添加到暂存区-棕红色
在这里插入图片描述
3.添加到暂存区的操作可以设置默认添加
在这里插入图片描述
在这里插入图片描述

06. 克隆远程仓库

方式一
在这里插入图片描述
在这里插入图片描述

方式二
在这里插入图片描述
在这里插入图片描述
克隆一个(开源)的远程仓库
在这里插入图片描述

05.将暂存区提交到版本库

1.选择项目/文件-右键-Git-Commit(记录到版本库的文件-黑色)
在这里插入图片描述
在这里插入图片描述
2. 如果对记录到版本库的文件进行了修改,也就是说工作空间和版本库不一致一-蓝色
在这里插入图片描述
在这里插入图片描述

③:IDEA中Git分支管理

01.创建分支

1. 点击IDEA右下角Git
2. 在弹窗中点击New Branch
3. 输入新分支的名称
在这里插入图片描述

02.切换分支

1.点击IDEA右下角Git
2.点击非当前分支右边的箭头
3. 在选项卡点击checkout
在这里插入图片描述

03.删除分支

在这里插入图片描述

04.合并分支

例如:将dey合并到naster

  • 切换到master分支
  • 点击dey分支右面的箭头,在展开的菜单中选择Merge into current
1.在dev分支中添加一些内容并提交
在这里插入图片描述
在这里插入图片描述

④:IDEA中使用Git进行团队协同开发

01.项目管理者

  1. 完成项目的搭建

  2. 为当前项目创建本地版本库

  3. 将搭建好的项目提交到本地版本库

    1. add到暂存区
    2. 提交
  4. 创建远程仓库

    1. https://gitee.com/c-coke/02_git-demo2.git
    2. 管理👉添加开发者
  5. 将本地仓库push到远程仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  1. 在远程仓库新建dev分支(master需要进行保护)
在这里插入图片描述
  1. 将本地dev push到远程仓库
    |在这里插入图片描述|
    | 在这里插入图片描述|
  2. 将master分支设置为保护分支
在这里插入图片描述

02.项目开发者

  1. 从管理员提供的远程仓库pull到本地
    1. 远程仓库:https://gitee.com/c-coke/02_git-demo2.git
      在这里插入图片描述
1. 在远程仓库中直接修改代码 模拟其他开发人员
在这里插入图片描述
2. 拉取远程仓库的信息
在这里插入图片描述
在这里插入图片描述

⑤:IDEA中使用Git的冲突解决

1. 模拟同时提交冲突问题
在这里插入图片描述
2. 模拟另外一名开发者 在本地同样的文件中添加一行代码
在这里插入图片描述
3.本地开发人员push到远程仓库
在这里插入图片描述
4.合并两人的代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Started by user sl Running as SYSTEM Building in workspace /var/jenkins_home/workspace/sl-express-gitflow-web [WS-CLEANUP] Deleting project workspace... [WS-CLEANUP] Deferred wipeout is used... [WS-CLEANUP] Done The recommended git tool is: NONE using credential 81a93e16-3a6b-474b-8727-1293bde49842 Cloning the remote Git repository Cloning repository http://git.sl-express.com/sl/sl-express-gitflow-web.git > /usr/bin/git init /var/jenkins_home/workspace/sl-express-gitflow-web # timeout=10 Fetching upstream changes from http://git.sl-express.com/sl/sl-express-gitflow-web.git > /usr/bin/git --version # timeout=10 > git --version # 'git version 2.30.2' using GIT_ASKPASS to set credentials gogs账号 > /usr/bin/git fetch --tags --force --progress -- http://git.sl-express.com/sl/sl-express-gitflow-web.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > /usr/bin/git config remote.origin.url http://git.sl-express.com/sl/sl-express-gitflow-web.git # timeout=10 > /usr/bin/git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 Avoid second fetch > /usr/bin/git rev-parse refs/remotes/origin/develop^{commit} # timeout=10 Checking out Revision 46c2028eb5f59801b8baca4d73fa5acbbbb33d2f (refs/remotes/origin/develop) > /usr/bin/git config core.sparsecheckout # timeout=10 > /usr/bin/git checkout -f 46c2028eb5f59801b8baca4d73fa5acbbbb33d2f # timeout=10 Commit message: "实现相乘的接口" > /usr/bin/git rev-list --no-walk 46c2028eb5f59801b8baca4d73fa5acbbbb33d2f # timeout=10 [SSH] script: chmod a+rw /var/run/docker.sock [SSH] executing... [SSH] completed [SSH] exit-status: 0 [sl-express-gitflow-web] $ /maven/bin/mvn -s /maven/conf/settings.xml -gs /maven/conf/settings.xml clean package -Dmaven.test.skip=true -U [INFO] Scanning for projects... [INFO] [INFO] -----------< com.sl-express.gitflow:sl-express-gitflow-web >------------ [INFO] Building sl-express-gitflow-web 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ sl-express-gitflow-web --- [INFO] [INFO] --- spring-boot-maven-plugin:2.6.6:build-info (default) @ sl-express-gitflow-web --- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ sl-express-gitflow-web --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 3 resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ sl-express-gitflow-web --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 2 source files to /var/jenkins_home/workspace/sl-express-gitflow-web/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ sl-express-gitflow-web --- [INFO] Not copying test resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ sl-express-gitflow-web --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ sl-express-gitflow-web --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ sl-express-gitflow-web --- [INFO] Building jar: /var/jenkins_home/workspace/sl-express-gitflow-web/target/sl-express-gitflow-web-1.0-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.6.6:repackage (default) @ sl-express-gitflow-web --- [INFO] Replacing main artifact with repackaged archive [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.899 s [INFO] Finished at: 2025-06-29T23:35:04+08:00 [INFO] ------------------------------------------------------------------------ [sl-express-gitflow-web] $ /bin/bash /tmp/jenkins10798732479328880887.sh chmod: cannot access 'target/-1.0-SNAPSHOT.jar': No such file or directory Docker version 20.10.17, build 100c701 ---------停止容器()--------- "docker stop" requires at least 1 argument. See 'docker stop --help'. Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] Stop one or more running containers ---------删除容器()--------- "docker rm" requires at least 1 argument. See 'docker rm --help'. Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...] Remove one or more containers ---------删除镜像(:1.0-SNAPSHOT)--------- Error response from daemon: invalid reference format ---------构建新镜像(:1.0-SNAPSHOT)--------- invalid argument ":1.0-SNAPSHOT" for "-t, --tag" flag: invalid reference format See 'docker build --help'. ---------运行服务--------- docker: invalid reference format: repository name must be lowercase. See 'docker run --help'. Build step 'Execute shell' marked build as failure Finished: FAILURE
最新发布
06-30
在 Jenkins 构建过程中,遇到 `docker stop`, `docker rm`, `docker tag`, `docker build` 等命令执行失败,并提示 `invalid reference format` 错误,通常是由于镜像名称或标签格式不正确所导致的。该问题可能出现在 Jenkinsfile 的构建脚本中,尤其是在使用变量拼接 Docker 镜像名称和标签时[^1]。 ### 常见原因与解决方案 #### 1. **Docker 镜像名或标签为空** 当 Jenkins 使用环境变量定义镜像名称(如 `${env.IMAGE_NAME}`)或标签(如 `${env.BRANCH_NAME}`)时,若变量未正确设置或为空,则会导致 `docker build -t` 或 `docker tag` 操作失败。 **示例错误命令:** ```bash docker build -t ${IMAGE_NAME}:${BRANCH_NAME} . ``` 如果 `BRANCH_NAME` 为 `feature/new-branch` 这样的 Git 分支名,直接用于镜像标签会导致非法字符(如 `/`)出现,从而触发 `invalid reference format` 错误。 **解决方法:** -分支名称进行替换处理,避免非法字符: ```bash docker build -t ${IMAGE_NAME}:${BRANCH_NAME//\//-} . ``` - 确保所有变量在 Jenkins Pipeline 中被正确赋值,可通过 `echo` 打印变量内容进行调试: ```groovy echo "Image name: ${env.IMAGE_NAME}, Branch: ${env.BRANCH_NAME}" ``` #### 2. **Jenkins Pipeline 中 Shell 脚本执行方式不当** 在 Jenkins Pipeline 的 `sh` 步骤中,如果命令拼接不当或缺少必要的空格、转义符,也可能导致命令解析失败。 **示例错误写法:** ```groovy sh "docker tag ${IMAGE_NAME}:${BRANCH_NAME} registry.example.com/${IMAGE_NAME}:${BRANCH_NAME}" ``` **改进写法:** 确保变量前后有引号包裹,防止空格或特殊字符干扰: ```groovy sh ''' docker tag "${IMAGE_NAME}:${BRANCH_NAME}" "registry.example.com/${IMAGE_NAME}:${BRANCH_NAME//\//-}" ''' ``` #### 3. **权限问题导致容器操作失败** 如果 Jenkins 容器内部执行 `docker stop` 或 `docker rm` 命令失败,可能是由于容器用户权限不足。默认情况下,Jenkins 容器以非 root 用户运行,无法直接管理宿主机上的 Docker 守护进程[^2]。 **解决方法:** - 启动 Jenkins 容器时指定 `-u root` 以 root 权限运行: ```bash docker run -u root ... jenkinsci/blueocean ``` - 确保挂载了 Docker 套接字: ```bash -v /var/run/docker.sock:/var/run/docker.sock ``` #### 4. **Jenkins 构建节点权限配置不当** 如果 Jenkins 设置了多节点(agent),而某些节点未正确配置 Docker 环境或权限,也可能导致构建失败。 **解决方法:** - 在 Jenkins Pipeline 中明确指定具有 Docker 支持的节点: ```groovy node("docker-node") { stage("Build Image") { sh "docker build -t myapp:${env.BUILD_ID} ." } } ``` --- ### 示例修复后的 Jenkinsfile 片段 ```groovy pipeline { agent any environment { IMAGE_NAME = "myapp" BRANCH_NAME = "${env.GIT_BRANCH}" } stages { stage("Build Docker Image") { steps { script { def sanitizedBranch = BRANCH_NAME.replaceAll("/", "-") sh """ docker build -t \${IMAGE_NAME}:\${sanitizedBranch} . """ } } } stage("Tag and Push") { steps { script { def sanitizedBranch = BRANCH_NAME.replaceAll("/", "-") sh """ docker tag \${IMAGE_NAME}:\${sanitizedBranch} registry.example.com/\${IMAGE_NAME}:\${sanitizedBranch} docker push registry.example.com/\${IMAGE_NAME}:\${sanitizedBranch} """ } } } } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七@归七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值