当前位置: 首页 > 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 都有一个…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...