GIT库中禁止追踪文件变化的两种方式

别再只插线了!用示波器‘偷看’USB-C PD协议握手全过程(附BMC/4B5B编码解析) 本文详细介绍了如何使用示波器捕获并解码USB-C PD协议的握手过程,包括BMC/4B5B编码的解析技巧。从硬件配置到波形分析,再到协议注入,为工程师提供了一套完整的实战解码手册,帮助深入理解PD协议的工作原理。 阅读详情


在使用GIT库管理代码的时候,如果工程的编译配置不太合理,编译过程中生成的中间文件会和源代码混杂在一起,或者每次编译都会对某些文件都进行部分更新等。此类文件,往往会对GIT的add和commit操作造成麻烦,特别是当工程中大量存在此类文件时,在进行git add操作时,必需对需要更新的文件一个个单独add,这时真是费事费力,异常痛苦。当然,我们希望遇到每个工程都配置合理,避免上述问题。但是实际工作中,由于历史原因,或者是由于第三方代码的引入,上述问题似乎不可避免。
为了解决上述问题,GIT至少提供了两种方式来禁止追踪以上两类易变化但又不需要频繁check-in的文件,一种是大家熟悉的.gitignore文件,另一种是'git update-index'命令。下面详细描述两种方式的用法。

使用.gitignore文件

使用.gitignore的文件禁止GIT库追踪文件的方法比较简单,用起来很方便,网上的相关介绍也比较多。
比如说工程中有一个加入了一个第三方的源代码包,编译后生成的中间文件.o, .so, .a 文件均不需要添加到GIT库中进行管理,这时,只需要在第三方源代码包的顶级目录下加入一个.gitignore文件,填入如下过滤规则,即可忽略该目录下所有的.o, .so, .a文件:

*.o
*.a
*.so

如果是一个比较大的工程,难以在短时间内确定工程中所有中间生成文件的具体位置,那么也有快速解决问题的办法。我采用的方式如下:

  • Step 1: 取一个干净的初始GIT库;
  • Step 2: 编译整个工程;
  • Step 3: 在GIT库的根目录下,利用git clean -df命令查找出所有未被追踪的中间生成文件

    git clean -df > untracked_file.log

    此时得到的untracked_file.log中包含了编译过程中生成目录和文件,并且还都没有被check-in进GIT库中。untracked_file.log的内容大概如下:

    ......
    Removing project/develop/extra/target/lib/htb.so
    Removing project/develop/mm_test/bin.macan/
    ......
  • Step 4: 利用untracked_file.log 生成.gitignore(大家应该都能猜到该怎么做了)
    编辑untracked_file.log, 查找所有的"Removing "字符串,替换为空,然后把文件改名为.gitignore即可。

    project/develop/extra/target/lib/htb.so
    project/develop/mm_test/bin.macan/
  • step 5: 把生成的.gitignore放在GIT库的根目录下,并上传至GIT库。
    如上操作便可以禁止GIT追踪编译过程中的中间生成目录和文件。

利用'git update-index --assume-unchanged' 命令

当一个文件必需放进GIT库里,同时又不需要每次改动的时候都要在库中做更新的时候,.gitignore就派不上用场了。你可能疑惑,怎么会有这样的文件呢?
举个例子,比如说我的工程中有一个buildtime.h, 每次make的时候,makefile中会自动的调用脚本获取当前系统时间,并更新buildtime.h中关于BUILD_TIME的宏定义。这个文件必需放在库里,否则编译的时候会告诉你找不到头文件;同时,这个文件每次编译都会更新,但是根本不需要提交更新.(历史遗留代码)。
再举个例子,比如说,工程里包含了很多第三方的包,开发时从来不需要改动第三方的源代码,但是每次编译,第三方的源文件或多或少都会发生一些变化。这种情况其实比较常见,原因也比较多,但总之,第三方代码在编译的过程中发生的改动完全不需要被提交到库里。
以上两种情形,.gitignore是没法用的,却可以通过如下命令告诉本地GIT库,不必对指定的文件进行追踪:

git update-index --assume-unchanged project/buildtime.h

如果接手一个比较大的工程,里边有巨多此类的文件,该怎么处理,一个个都找出来吗?不用担心,我采用的方法如下:

  • step 1: 取一个干净的初始GIT库;
  • step 2: 编译整个工程;
  • step 3: 在GIT库的根目录下,利用git clean -df命令,清理掉所有的中间生成文件和目录(参考.gitignore技巧中的step 3);
  • step 4: 利用git status命令,获取modified文件列表;

    git status > modified_file.log

    modified_file.log的内容,通常如下:

    ......
    #        modified:    project/buildtime.h
    ......
  • step 5: 编辑modified_file.log,生成disable_track.sh脚本。同样是对文件是查找,替换操作,最后生成如下的.sh脚本

    #!/bin/bash
    git update-index --assume-unchanged project/buildtime.h
    ......

    通常,我还会再生成一个enable_track.sh脚本,作为disable_track.sh的反向操作,以备不时之需:

    #!/bin/bash
    git update-index --no-assume-unchanged project/buildtime.h
    ......
  • step 6: 在本地库中执行disable_track.sh脚本, 即可禁止本地库对指定的文件进行追踪。如果需要忽略文件巨多,这步操作耗时会比较久,好在只要执行一次就可以了。
  • step 7: 把刚生成的脚本上传到GIT库,通知团队其它成员执行。'git update-index‘ 可不比.gitignore, 这个命令仅对本地库生效,所以需要上传到GIT库,让团队其它开发人员自己在本地库下执行脚本。

总结

我现在使用的GIT工程,每次编译后,大量存在上述两类文件。每次执行git add需要找到自己改动过的文件一个一个添加,实在是无法忍受,就花了点时间在工程里做了上述的处理,效果出奇的好,不但git add可以随便用了,而且,由于大量变化的文件不需要跟踪了,GIT add, commit的操作速度也提升了不少。

c++ webrtc基础(1) :webrtc源码下载与编译、项目模块介绍、学习资料推荐 本篇博客介绍webrtc源码的下载与编译,以及推荐webrtc学习资料。 源码下载 电脑环境:win10/win11 64bit,合理的上网环境,没有合理的网络环境无法拉取、下载webrtc代码和工具,宽带速度要快,尽量50M. 主要步骤如下: (1) 安装git (2) 打开cmd控制台,下载google开发工具depot_tools: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git (3) 新建一个目 阅读详情

相关推荐

Cass三角网法土方计算优化技巧:如何根据地形特点调整边界采样间距

本文深入探讨了Cass软件中三角网法(DTM法)土方计算的优化技巧,核心在于如何根据地形的复杂程度动态调整边界采样间距。针对平坦、复杂及人工构造物等不同地形特征,提供了具体的间距调整策略与精度验证方法,旨在帮助工程师在计算精度与效率间找到最佳平衡,实现精细化土方计算。

weixin_29294975的博客 523

Git工作流提效三法则:提交分级、stash索引与代码因果追踪

Git 不仅是版本控制工具,更是支撑多人协作与可追溯开发的核心基础设施。其底层原理围绕对象模型、快照机制与分布式共识展开,技术价值在于降低协作熵增、提升变更可审计性与故障根因定位效率。典型应用场景包括 CI/CD 流水线触发决策、紧急 hotfix 上下文隔离、以及配置项/常量演化的跨提交追溯。本文聚焦 commit 意图分级、stash 可检索快照、git log -S 因果链分析三大原生 Git 实践,结合 pre-commit 钩子、stash -m 元数据、pickaxe 语义搜索等能力,将 Git

weixin_30892037的博客 562

Win11下Android模拟器报HAXM未安装?三步搞定虚拟化配置(附终端命令)

本文详细解析了Win11下Android模拟器HAXM报错的解决方案,从虚拟化配置到终端命令实战。通过检查BIOS设置、调整Windows功能及执行PowerShell命令,三步搞定虚拟化配置问题,有效提升模拟器性能。特别针对Win11与HAXM的兼容性问题提供了专业指导。

weixin_29215815的博客 143

git忽略追踪文件、本地库特殊配置、忽略上传本地文件

git忽略追踪文件、本地库特殊配置、忽略上传本地文件

静笃塾 1908

Multisim实战:从零搭建体温检测报警电路(附完整仿真文件+调试技巧)

本文详细介绍了如何使用Multisim从零搭建体温检测报警电路,涵盖LM35温度传感器、LM358运算放大器等核心器件的选型与连接,以及信号调理、阈值比较和数码管显示等关键电路设计。附赠完整仿真文件和实用调试技巧,帮助电子工程初学者快速掌握体温温度检测系统的设计与实现。

weixin_28285943的博客 292

matlab/simulink saw谐振器仿真,基于Matlab的SAW模态耦合模型的仿真研究

第32卷 第 4 期Vol. 32 No. 4重 庆 理 工 大 学 学 报 (自然科学)Journal of Chongqing University of Technology( Natural Science)2 0 1 8年 4 月Apr. 2018doi : 10.3969/j . issn. 1674-8425(z). 2018.04.002本文引用格式 :李志鹏,马龙祥,孟旭,等•基...

weixin_36192634的博客 1385

git不跟踪修改权限的文件设置

git中可以加入忽略文件权限的配置,具体如下: $gitconfigcore.filemodefalse // 当前版本库 $ git config --global core.fileMode false // 所有版本库

shenlichuang的博客 1932

单片机多级菜单的简单实现

单片机多级菜单的简单实现 多级菜单的思路 最近想把stm32上的oled显示屏做的好看一些,于是动手写了写一个多级菜单,思路很简单,每个页面用单独的函数封装好,每个功能也是用单独的函数进行封装,用了3个按键,两个切换键,一个确定键。 首先来看看用啥判断页面的(这偷个懒,希望没人打我) //页面标志位 uint8_t s1 = 0; //主页面功能号 uint8_t s2 = 0; //主次页面判断标志位 uint16_t s3 = 1; //次页面功能号 主页面的显示函数,这是个很枯燥的一

qq_43940175的博客 7604

git取消文件或文件夹追踪

已经被追踪的过的文件,需要先用如下语句删除追踪,再添加到.gitignore中防止下次被追踪。该操作会删除远程仓库中对应的文件或文件夹。--------样例------------------------------------------------------------------样例----------------------------------------------------------git rm --f readme1.txt 删除readme1.txt的跟踪,并且删除本地文件。

记录日常开发过程中遇到的一些问题 3313

CMOS sensor 基础

NA

m0_72053187的博客 1657

Python 爬虫进阶:爬取 APP 数据(Charles 抓包 + Requests)

本文详细介绍了APP数据爬取的完整技术方案。首先通过Charles抓包工具配置HTTPS代理和证书,解析APP通信协议;然后分析请求参数、反爬机制和动态签名生成规则;接着使用Python的Requests库实现模拟请求、分页爬取和数据存储;最后针对证书问题、Token失效等常见问题提供解决方案。文章强调抓包分析、参数逆向和请求模拟三大核心技术,同时提醒开发者需遵守法律法规,合理控制爬取频率。该方案适用于移动端数据采集场景,为无法直接获取网页数据的情况提供了有效解决方案。

2503_91057718的博客 2120

如何删除Git仓库中的敏感文件及其历史记录

本文主要介绍如何使用命令删除 Git 仓库中的敏感文件及其历史记录。在 Git 中,我们通常会将敏感信息(如密码、私钥等)存储在 .gitignore 文件中,以防止这些信息被意外提交到仓库。有时候,因为疏忽或私有仓库转公开仓库,我们可能需要删除某个特定的敏感文件及其历史记录。

桑榆肖物 1723

SPICE仿真软件:HSPICE_(22).HSPICE仿真案例分析

通过上述案例分析,我们可以看到HSPICE仿真软件在不同电路类型和仿真场景中的应用。无论是简单的直流分析、交流分析还是复杂的暂态分析,HSPICE都能提供详细的仿真结果,帮助我们更好地理解和优化电路设计。希望这些案例能够为读者提供实用的参考和指导,进一步提升使用HSPICE进行电路仿真的能力。输入文件的编写:确保输入文件格式正确,使用注释来解释每一部分的内容。分析类型的选择:根据电路的特点选择合适的分析类型,如.DC.AC和.TRAN。输出结果的设置:使用.print命令来指定需要输出的节点电压和支路电流。

kkchenjj的博客 1306

Unity项目Git LFS配置全攻略:从安装到FBX文件追踪避坑指南

本文详细介绍了如何在Unity项目中配置Git LFS以高效管理大型3D资源文件,如FBX模型。从安装到文件追踪的完整流程,包括环境准备、项目初始化、资源追踪配置及团队协作规范,帮助开发者显著减少仓库体积并提升克隆速度。

metaverse5vr的博客 199

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

git diff比较代码差异:追踪PyTorch-CUDA-v2.8配置变更

在AI开发中,环境配置的微小变动常导致运行失败。通过git diff审查Dockerfile等配置文件的变更,能快速定位CUDA或PyTorch版本不兼容等问题根源。结合Git与容器化技术,实现环境可复现、变更可审计,提升团队协作效率与系统稳定性。

weixin_29840475的博客 950

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

GIT 必知必会操作总结一

GIT 是一个开源的分布式版本管理系统,是 Linux 之父 Torvalds 为了帮助管理Linux 内核开发而开发的一个版本控制软件它使用一个特殊的叫做仓库的数据库来记录文件的变化,仓库中每个文件都有一个完整的版本历史记录,可以看到谁在什么时间修改了哪些文件的哪些内容,在需要的时候也可以将文件恢复到之前的某一个版本如果没有版本控制系统,那么就只能通过最原始的方式来管理文件,比如将文件按日期备份出多个副本而当很多项目成员同时在修改同一个项目时,就需要手工来合并两个人的修改内容。

优质后端技术知识记录 914

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

git忽略指定文件夹

git忽略指定文件夹 如下结构,总共有三个文件夹 假设要忽略第一层的B文件夹 在目录下新建一个.gitignore文件,并填写下面内容 B/ 假设要忽略第一层的A文件夹,在文件中填写A/的话,会把B文件夹下的A文件夹也忽略了 这个时候可以加上一行,禁止忽略,如下所示 A/ !/B/A 踩坑记录 在顶层有一个app的文件夹是系统编译后生成的 第二层有一个我自己建的放代码的文件夹也叫app 一开始创建工程时在.gitignore中忽略app文件,后面我修改了app里面的文件后发现git里面没有变化,猜测被

m0_51518255的博客 574

git add 所有修改文件_工作中Git的使用实践

一:前言hi~ 又和大家见面了~本文总结了在工作中常用的基础命令和进阶命令,介绍了一种git提交格式的建议,整体简单介绍了一下git。Git的定义是:分布式版本控制系统,用于项目开发中的版本控制。从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。Git 的核心部分是一个简单的键值对数据库(key-value data...

weixin_39553753的博客 182

Git忽略规则实战:构建安全可靠的.gitignore四层防御体系

.gitignore 是 Git 版本控制中实现文件排除与开发环境隔离的核心机制,其本质是在暂存区(staging)前切断文件追踪路径,而非简单隐藏。理解其作用时机(仅影响未追踪文件)、作用域逻辑(斜杠/决定匹配层级)、以及与已追踪文件的交互关系,是避免密钥泄露、CI失败和仓库膨胀的关键。结合构建产物(dist/、build/)、敏感配置(.env*、*.key)、IDE痕迹(.vscode/、.idea/)和临时文件(*.log、*.tmp)等典型场景,一份结构化、可验证、可协作的 .gitignore

weixin_30902251的博客 479

《Git commit 不是终点:如何通过日志追溯版本变更轨迹》

Git commit只是版本控制旅程的起点,而日志才是照亮变更轨迹的灯塔。通过系统性地使用git loggit show和git diff等工具,您不仅能追溯历史,还能提升协作透明度和代码质量。记住,良好的提交习惯(如清晰的消息)是日志追溯的基础。立即应用这些方法,让您的项目历史成为可导航的宝库,而非杂乱无章的记录。每一次追溯,都是对软件生命周期的深刻理解。

2501_93891411的博客 746

Git文件误删急救指南:用SourceTree找回丢失代码的完整流程(附常见错误分析)

本文详细介绍了如何使用SourceTree在Git中恢复误删文件的完整流程,包括紧急制动、版本考古学、分支手术和团队协作安全准则。通过可视化工具和命令行结合的方法,帮助开发者快速找回丢失代码,并避免常见错误操作。文章还提供了高级恢复场景的处理技巧,确保在复杂情况下也能有效恢复数据。

t8u9v0的博客 966

git使用

一:前言 Git的定义是:分布式版本控制系统,用于项目开发中的版本控制。 从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。 Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索(retriev...

weixin_43606738的博客 218

Git命令

git命令

weixin_48120109的博客 7508

MToolsPrompt版本管理:Git追踪不同任务Prompt模板迭代历史

本文介绍了如何在星图GPU平台上自动化部署️ MTools - 多功能文本工具箱镜像,支持Prompt模板的Git化版本管理。用户可基于该镜像高效开展文本总结、关键词提取与技术文档翻译等典型NLP任务,实现AI协作流程的可追溯、可复现与工程化落地。

weixin_42418754的博客 400

全网最全git教程,一文带你玩转git

Git是一个分布式版本控制系统,用于跟踪文件和文件夹的变化。它最初由Linus Torvalds在2005年创建,用于管理Linux内核的开发。Git的设计目标是速度、数据完整性和支持分布式、非线性工作流程。与集中式版本控制系统(如SVN)不同,Git将代码仓库完全复制到每个开发者的本地计算机上,每个开发者都具有完整的代码历史记录和版本信息。这种分布式的特性使得开发者可以在没有网络连接的情况下进行工作,并且可以更轻松地处理分支、合并和代码冲突等操作。

老衲爱洗头的博客 1161

Git LFS Github 提交大文件

2024-03-03一篇微服务系统测试工具的论文,事后发现自己一开始的理解有问题,导致自己算的预期值和论文中正确的值不一样。测试工具原型的依赖定义有缺失,默认可能会用当前最新版,但时过境迁”最新版“变化会导致不兼容,因为不熟悉Python具体原因不确定。工具的测试结果通过屏幕输出,我希望保存下来,但最大的单个日志文件比较大,超过Github支持的100MB,提示用LFS。

legend_yst的博客 1563
上一篇: adb 调试连接补上问题
下一篇: TOA算法相关
音乐伴我远行
博客等级 码龄20年 19粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值