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

如何编写.gitignore文件

文章目录

  • 前端架构师教你如何编写.gitignore文件
    • .gitignore文件简介
    • .gitignore文件的语法规则
    • .gitignore文件的最佳实践
    • 常见问题与解决

前端架构师教你如何编写.gitignore文件

.gitignore文件简介

.gitignore文件是Git版本控制系统中一个非常有用的工具。它可以指定一组文件或目录,这些文件或目录将被Git忽略,不会纳入版本控制。这对于避免提交临时文件、构建产物、敏感配置信息等非常有用。

.gitignore文件的语法规则

  1. 忽略文件或目录

.gitignore文件中,每行可以指定一个模式。模式可以是文件名、目录名,也可以是使用通配符的模式。例如:

# 忽略所有.log文件
*.log# 忽略名为temp的目录
temp/
  1. 使用通配符
  • * 匹配任意数量的字符,但不包括目录分隔符/
  • ** 匹配任意数量的字符,包括目录分隔符/,用于递归匹配。
  • ? 匹配单个字符。
  • [abc] 匹配括号内任一字符。
# 忽略所有.txt文件
*.txt# 忽略所有目录下的.tmp文件
**/*.tmp# 忽略a.out, b.out等
*.out

[]用的比较少,因为.gitignore不支持复杂写法

# 忽略所有以a、b或c开头的.txt文件
[abc].txt

这意味着Git将忽略任何文件名恰好为a.txtb.txtc.txt的文件,但不会忽略d.txt或其他不以abc之一开头的.txt文件。

需要注意的是,这个模式只匹配单个字符。如果你想匹配多个字符中的任意一个,你需要使用其他模式,比如*通配符来匹配任意数量的任意字符,或者使用?来匹配任意单个字符。

举个例子,如果你想忽略所有以abc开头,并且扩展名为.log的文件,你应该这样写:

[abc]*.log

但这个模式实际上是错误的,因为它会尝试匹配以abc开头,后面跟着任意数量的任意字符,再后面是.log的文件。正确的模式应该是使用**来递归匹配任意数量的目录和文件名,如下:

**[abc]*.log

但这个模式也是不正确的,因为它会尝试匹配包含abc任意位置的.log文件。实际上,Gitignore的模式并不支持这种复杂的字符类与通配符的结合。要实现这个需求,你可能需要为每个情况单独写一行:

a*.log
b*.log
c*.log

或者,如果你的意图是忽略所有扩展名为.log的文件,不论它们是否以abc开头,你只需要简单地写:

*.log

请确保你理解你的.gitignore模式实际上是如何工作的,以避免意外的文件被忽略或未被忽略。

  1. 锚定模式

如果模式的开头或结尾包含目录分隔符/,则模式仅匹配以该目录分隔符开头或结尾的路径。

# 只忽略项目根目录下的TODO文件
/TODO# 忽略所有目录下的build目录
build/# 忽略所有以.html结尾的文件,但不忽略在子目录中的
/*.html
  1. 否定模式

!开头的模式表示否定,即不被忽略。否定模式可以覆盖之前的忽略模式。

# 忽略所有.a文件
*.a# 但不忽略lib.a
!lib.a
  1. 注释

使用#开头的行作为注释,Git会忽略这些行。

.gitignore文件的最佳实践

  1. 为项目类型定制

不同类型的项目有不同的临时文件和构建产物。例如,Node.js项目可能有node_modules目录,而Python项目可能有.pyc文件。因此,.gitignore文件应该根据项目的类型进行定制。

Node.js项目的.gitignore示例:

# 依赖目录
node_modules/# 日志文件
npm-debug.log*
yarn-debug.log*
yarn-error.log*# 编译产物
dist/
build/
  1. 忽略敏感信息

永远不要将包含敏感信息的文件(如密码、密钥等)纳入版本控制。确保在.gitignore文件中添加这些文件。

# 忽略敏感配置文件
config/secret.json
*.env
  1. 使用公共模板

对于常见的项目类型,可以在GitHub上找到许多公共的.gitignore模板。例如,创建新项目时,可以在GitHub的仓库创建页面选择适当的模板。

  1. 共享通用规则

如果多个项目使用相同的.gitignore规则,可以考虑将这些规则放在一个通用的文件中,并使用Git的子模块功能来共享。

  1. 注意否定模式的顺序

由于否定模式可以覆盖之前的忽略模式,因此需要注意它们的顺序。通常,更具体的模式应该放在更通用的模式之前。

常见问题与解决

  1. 我已经提交了不应该被追踪的文件,怎么办?

    首先,更新.gitignore文件以忽略这些文件。然后,使用git rm --cached <file>命令从Git的追踪中移除它们,但不从文件系统中删除。最后,提交更改。

  2. 为什么Git没有忽略我指定的文件?

    • 确保.gitignore文件位于正确的位置(通常是项目的根目录)。
    • 检查.gitignore文件的语法是否正确。
    • 如果文件已经被Git追踪,.gitignore不会对其生效。需要先停止追踪该文件。
  3. 我应该将.gitignore文件纳入版本控制吗?

    是的,通常应该将.gitignore文件纳入版本控制。这样,其他开发者可以共享相同的忽略规则。

总结

.gitignore文件是Git版本控制中不可或缺的一部分,它帮助我们保持仓库的整洁,避免敏感信息泄露,以及减少不必要的冲突。通过本文的介绍,你应该已经掌握了编写.gitignore文件的基本语法和最佳实践,并能够解决常见问题。记住,好的.gitignore文件是团队协作的基石之一。

相关文章:

如何编写.gitignore文件

文章目录 前端架构师教你如何编写.gitignore文件.gitignore文件简介.gitignore文件的语法规则.gitignore文件的最佳实践常见问题与解决 前端架构师教你如何编写.gitignore文件 .gitignore文件简介 .gitignore文件是Git版本控制系统中一个非常有用的工具。它可以指定一组文件或…...

U-Boot学习(7):内核启动之bootz启动zImage源码分析

在上一节中&#xff0c;我们分析了U-BOOT初始化的流程&#xff0c;最后就是进入U-Boot的命令行中执行了&#xff0c;如果用户没有任何操作&#xff0c;则经过固定延时后将执行默认的bootcmd环境变量里的指令&#xff0c;那这里面肯定就是启动内核了。在U-BOOT简介及命令行指令详…...

[GN] DP学习笔记板子

文章目录 Bitset滚动数组多重背包区间DP树形dp状压dp模拟退火 Bitset 使用bitset需要引用<bitset>头文件。 其声明方法为: std::bitset<N>s; (N为s长度)常用函数&#xff1a; b.any() 判断b中是否存在值为1的二进制位 b.none() 判断b中是否不存在值为1的二…...

GLog开源库使用

Glog地址&#xff1a;https://github.com/google/glog 官方文档&#xff1a;http://google-glog.googlecode.com/svn/trunk/doc/glog.html 1.利用CMake进行编译&#xff0c;生成VS解决方案 &#xff08;1&#xff09;在glog-master文件夹内新建一个build文件夹&#xff0c;用…...

微信小程序如何实现点击上传图片功能

如下所示,实际需求中常常存在需要点击上传图片的功能,上传前显示边框表面图片显示大小,上传后将图形缩放到边框大小。 实现如下: .wxml <view class="{{img_src==?blank-area:}}" style="width:100%;height:40%;display:flex;align-items: center;jus…...

Windows Qt C++ VTK 绘制三维曲线

Qt 自带数据可视化从文档上看&#xff0c;只能实现三维曲面。 QwtPlot3D在Qt6.6.0上没编译通过。 QCustomPlot 只能搞二维。 VTK~搞起。抄官网demo。 后续需求&#xff1a; 1、对数轴 2、Y轴逆序 3、Z轴值给色带&#xff0c;类似等高线图的色带 期待各位大佬多多指导。…...

Android T 远程动画显示流程(更新中)

序 本地动画和远程动画区别是什么? 本地动画&#xff1a;自给自足。对自身SurfaceControl矢量动画进行控制。 远程动画&#xff1a;拿来吧你&#xff01;一个app A对另一个app B通过binder跨进程通信&#xff0c;控制app B的SurfaceControl矢量动画。 无论是本地动画还是远程…...

【计算机网络】【练习题及解答】【新加坡南洋理工大学】【Computer Control Network】

说明&#xff1a; 仅供学习使用。 一、题目描述 题目共4问&#xff0c;描述网络通信中的 帧传输时延&#xff08;Frame Delay&#xff09;、传播时延&#xff08;Propagation Delay&#xff09;&#xff0c;以及 链接利用率&#xff08;Link Utilization&#xff09; 的相关…...

云计算HCIE备考经验分享

大家好&#xff0c;我是来自深圳信息职业技术学院22级鲲鹏3-1班的刘同学&#xff0c;在2023年9月19日成功通过了华为云计算HCIE认证&#xff0c;并且取得了A的成绩。下面把我的考证经验分享给大家。 转专业进鲲鹏班考HCIE 大一上学期的时候&#xff0c;在上Linux课程的时候&…...

Threejs API——`OrbitControls`相机控件

文章目录 API用法API OrbitControls 相机控制用法 导入import {OrbitControls } from three/examples/jsm/controls/OrbitControls.js import {DRACOLoader,AmbientLight,Color,MOUSE,...

远程教育:低代码在教育技术领域的重塑之力

新冠肺炎大流行对世界各地的行业产生了影响&#xff0c;其中一些行业的影响远远超过其他行业。食品、零售、供应链、娱乐和航空业是受影响最大的行业&#xff0c;为确保不间断运营&#xff0c;这引发了一场数字革命。相信&#xff0c;这种数字化的采用将长期保持下去&#xff0…...

vue 模板语法值class操作

class.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>class</title><!-- 确保引入正确的Vue版本库&#xff0c;下面只是示例&#xff0c;需要替换为实际可工作的CDN地址 --><sc…...

MySQL的原生API实现插入数据后在可视化工具上不显示的问题解决

显示表中有两行数据&#xff0c;该表也设置了主键和唯一索引 点进表里看却没有数据 问题原因出现在这里&#xff0c;虽然很多常用的数据库连接池都会开启自动提交&#xff0c;但ibatis的SqlSession使用sessionFactory.openSession()创建时&#xff0c;默认的自动提交是false&am…...

Blender教程(基础)-内插面、分离、环切、倒角-08

一、内插面 菜单位置如下图位置。 单击需要处理的面&#xff0c;出现一个黄色的圈。 1、菜单选中内插 鼠标悬停在黄色圈内单击左键可以来回实现内插&#xff0c;但是发现并不好操作。 2、快捷键内插 在选中需要操作的面之后&#xff0c;鼠标移动到外面&#xff0c;键盘在英…...

Unity 自动轮播、滑动轮播

如图所示&#xff0c;可设置轮播间隔&#xff0c;可左右滑动进行轮播 1.在UGUI创建个Image&#xff0c;添加自动水平组件 2.添加并配置脚本 3.代码如下&#xff0c;都有注释 using UnityEngine; using UnityEngine.UI;public class IndicatorManager : MonoBehaviour {public …...

纯html+js+css个人博客

首页 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><title>主页</title><!-- 引入layui css文件 --><link rel"stylesheet" href"layui-…...

二百二十一、HiveSQL报错:return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

一、目的 在运行HiveSQL时&#xff0c;执行报错 tatement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 二、在yarn上查看任务报错 The required MAP capability is more than the supported max container capability in t…...

JavaEE学习笔记 2024-1-25 --VUE的入门使用

上一篇 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 文章目录 14.VUE基础14.1VUE的入门使用14.2条件判断14.3循环渲染14.4v-bind绑定标签属性14.5v-model表单标签的双向绑定14.6事件处理14.7axios 14.VUE基础 前端框架 UI框架:页面渲染Bootstrap,L…...

php-fpm详细讲解

PHP-FPM&#xff08;FastCGI Process Manager&#xff09;是PHP的一种运行模式&#xff0c;用于处理动态HTTP请求。 它与传统的模块式PHP&#xff08;如Apache模块&#xff09;相比&#xff0c;将PHP解析和执行过程单独封装为一个独立的进程池&#xff0c;通过FastCGI协议与We…...

小白水平理解面试经典题目LeetCode 455 Assign Cookies【Java实现】

455 分配cookies 小白渣翻译&#xff1a; 假设你是一位很棒的父母&#xff0c;想给你的孩子一些饼干。但是&#xff0c;你最多应该给每个孩子一块饼干。 每个孩子 i 都有一个贪婪因子 g[i] &#xff0c;这是孩子满意的 cookie 的最小大小&#xff1b;每个 cookie j 都有一个…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...