当前位置: 首页 > news >正文

【Git企业开发】第六节.配置 Git和标签管理

文章目录

  • 前言
  • 一、配置 Git
  •       1.1 忽略特殊文件
  •       1.2 给命令配置别名
  • 二、标签管理
  •        2.1 理解标签
  •        2.2 创建标签
  •        2.3 操作标签
  • 总结


前言

一、配置 Git

1.1 忽略特殊文件

在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让Git知道呢?


在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件了。

注意:不需要从头写.gitignore文件,gitee在创建仓库时就可以为我们生成,不过需要我们主动勾选一下:

图示示例:

如果当时没有选择这个选择,在工作区创建一个也是可以的。无论哪种方式,最终都可以得到一个完整的.gitignore文件,

举例说明:

例如我们想忽略以.so和.ini结尾所有文件,.gitignore的内容如下:

代码举例:

# 省略选择模本的内容
...
# My configurations:
*.ini
*.so
在 .gitignore 文件中也可以指定某个确定的文件。

最后一步就是把 .gitignore 也提交到远端,就完成了:

代码示例:

hyb@139-159-150-152:~/git_teaching$ vim .gitignore
hyb@139-159-150-152:~/git_teaching$ git add .
hyb@139-159-150-152:~/git_teaching$ git commit -m"add .gitignore"
[master 97811ab] add .gitignore
file changed, 3 insertions(+)
create mode 100644 .gitignore
hyb@139-159-150-152:~/git_teaching$ git push origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 362 bytes | 362.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git
60e6b0a..97811ab master -> master

接着我们就来验证⼀下.gitignore文件的能力,在工作区新增两个文件 a.so b.ini。
代码示例:
hyb@139-159-150-152:~/git_teaching$ touch a.so b.ini
hyb@139-159-150-152:~/git_teaching$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean

检验.gitignore的标准就是git status命令是不是说 working tree clean 。我们发现Git并没有提示在工作区中有文件新增,果然.gitignore生效了!


但有些时候,你就是想添加一个文件到Git,但由于这个文件被.gitignore忽略了,根本添加不了,那么可以用-f 强制添加:

代码示例:
$ git add -f [filename]
或者你发现,可能是.gitignore 写得有问题,需要找出来到底哪个规则写错了,
比如说a.so文件是要被添加的,可以用git check-ignore命令检查:
代码示例:
hyb@139-159-150-152:~/git_teaching$ git check-ignore -v a.so
.gitignore:3:*.so a.so

Git 会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。


还有些时候,当我们编写了规则排除了部分文件时,例如:

# 排除所有.开头的隐藏文件:
.*
但是我们发现.*这个规则把.gitignore也排除了。虽然可以用git add -f 强制添加进去,但有强迫症的童鞋还是希望不要破坏.gitignore规则,
这个时候,可以添加一条例外规则:
# 不排除.gitignore
!.gitignore
把指定文件排除在.gitignore|规则外的写法就是:!+文件名,所以,只需把例外文件添加进去即可。


1.2 给命令配置别名

在我们使用Git期间,有些命令敲的时候着实让人头疼(太长了。。),幸运的是,git支持对命令进行简化!!!

举个例子,将git status简化为 git st,对应的命令为:

1 $ git config --global alias.st status

--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。

如果不加,那只针对当前的仓库起作用。

好了,现在敲git st看看效果:

代码示例:

hyb@139-159-150-152:~/git_teaching$ git st
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean

再来配置一个git last,让其显示最后一次提交信息:

 $ git config --global alias.last ' log1"

这样,用git last就能显示最近一次的提交:

代码示例:

hyb@139-159-150-152:~/git_teaching$ git last
commit 97811abd1d43774aeb54fee32bf4fc76b2b08170 (HEAD -> master, origin/master,
Author: hyb91 <2689241679@qq.com>
Date: Fri May 12 17:27:06 2023 +0800
add .gitignore

不过,我个人还是不推荐大家现在去使用他,等大家工作了,再去简化自己的工作吧,目前所有的命令都要手动完成,尽快适应Git。


二、标签管理

2.1 理解标签

标签tag,可以简单的理解为是对某次commit的一个标识,相当于起了一个别名。

例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。


这有什么用呢?

相较于难以记住的commit id , tag 很好的解决这个问题,因为tag一定要给一个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。


2.2 创建标签

在Git中打标签非常简单,

(1)首先,切换到需要打标签的分支上。

代码示例:

hyb@139-159-150-152:~/git_teaching$ git branch
* master

(2)然后,敲命令git tag [name]就可以打一个新标签:

代码示例:
1 hyb@139-159-150-152:~/git_teaching$ git tag v1.0

(3)可以用命令git tag查看所有标签: 

代码示例:

hyb@139-159-150-152:~/git_teachings git tag2

v1.0


默认标签是打在最新提交的commit上的。那如何在指定的commit上打标签呢?

方法是找到历史提交的commit id,然后打上就可以了,

代码示例如下:

# 历史记录
hyb@139-159-150-152:~/git_teaching$ git log --pretty=oneline --abbrev-commit
97811ab (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) add .gitignore
60e6b0a update README.md.
7ce3183 create file.txt
c6ce3f0 Initial commit
# 对 Initial commit 这次提交打标签
hyb@139-159-150-152:~/git_teaching$ git tag v0.9 c6ce3f0
hyb@139-159-150-152:~/git_teaching$ git tag
v0.9
v1.0

注意:
标签不是按时间顺序列出,而是按字母排序的。
可以用git show [tagname]查看标签信息
代码示例:
hyb@139-159-150-152:~/git_teaching$ git show v1.0
commit 97811abd1d43774aeb54fee32bf4fc76b2b08170 (HEAD -> master, tag: v1.0, orig
Author: hyb91 <2689241679@qq.com>
Date: Fri May 12 17:27:06 2023 +0800
add .gitignore
diff --git a/.gitignore b/.gitignore
...

Git还提供可以创建带有说明的标签,用-a指定标签名,-m指定说明文字,

格式为:

git tag -a [name] -m "XXX" [commit_id]
另外,打完标签之后,使用 tree .git命令 查看一下你的本地库有什么变化 ,肯定能帮助你理解!

2.3 操作标签

如果标签打错了,也可以删除:

代码示例:

hyb@139-159-150-152:~/git_teaching$ git tag
v0.9
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v0.9
Deleted tag 'v0.9' (was c6ce3f0)
hyb@139-159-150-152:~/git_teaching$ git tag
v1.0

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令git push origin <tagname>

代码示例:

hyb@139-159-150-152:~/git_teaching$ git tag
v1.0
hyb@139-159-150-152:~/git_teaching$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git
* [new tag] v1.0 -> v1.0
此时,查看远端码云,看到了标签已经被更新!完美!
图示示例:

当然,如果你本地有很多标签,也可以一次性的全部推送到远端:

使用命令git push origin --tags


如果标签已经推送到远程,要删除远程标签就⿇烦⼀点,先从本地删除:
代码示例:本地删除
hyb@139-159-150-152:~/git_teaching$ git tag
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v1.0
Deleted tag 'v1.0' (was 97811ab)
然后,从远程删除。删除命令也是push,但是格式如下:
代码示例:远程删除
hyb@139-159-150-152:~/git_teaching$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git
- [deleted] v1.0
在码云上查看确实删除成功:

总结

相关文章:

  • 【ES专题】ElasticSearch功能详解与原理剖析
  • 灰度与二值化
  • android studio离线tips
  • 【机试题】编写一个Java函数,实现批量获取数据的功能
  • uniapp 本身就是一个坑,里面还有无数的小坑
  • odoo16前端框架源码阅读——启动、菜单、动作
  • 【Delphi】 各个平台使用 ntfy 效果说明
  • laravel8-rabbitmq消息队列-实时监听跨服务器消息
  • 使用venv 创建虚拟环境
  • 如何安装Node.js? 创建Vue脚手架
  • 【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询(二)——前端el-pagination实现
  • 深度学习_11_softmax_图片识别代码原理解析
  • helm 常用命令搜集 —— 筑梦之路
  • Nginx(五)
  • SpringBoot 使用EasyExcel 导出Excel报表(单元格合并)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android交互
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Golang-长连接-状态推送
  • GraphQL学习过程应该是这样的
  • JS变量作用域
  • LintCode 31. partitionArray 数组划分
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • passportjs 源码分析
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里云前端周刊 - 第 26 期
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 码农张的Bug人生 - 见面之礼
  • 悄悄地说一个bug
  • 入口文件开始,分析Vue源码实现
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 详解NodeJs流之一
  • 异步
  • ​Linux·i2c驱动架构​
  • # Panda3d 碰撞检测系统介绍
  • #define、const、typedef的差别
  • #mysql 8.0 踩坑日记
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #QT项目实战(天气预报)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (poj1.2.1)1970(筛选法模拟)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)基于IDEA的JAVA基础10
  • (已解决)什么是vue导航守卫
  • (转)关于pipe()的详细解析
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net core使用ef 6
  • .NET MVC 验证码
  • .NET 表达式计算:Expression Evaluator
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .Net环境下的缓存技术介绍
  • .Net面试题4