zoukankan      html  css  js  c++  java
  • git 填坑之 git 暂存区忽略文件

    今天修改公司项目文件的时候,发现被修改的文件的始终不显示已经被修改。

    本来是想要把 KWh 改成 kWh,然后执行 git status 后,没有文件修改记录:

    开始分析究竟是因为什么导致的这样诡异的结果:

    1. 大小写不敏感?

    第一反应是文件对于大小写不敏感了,想到配置 git config。

    查询到有这样一条指令 git config ignorecase false 如此指令就是大小写敏感。

    依照设置以后,再次执行  git status ,仍然没有文件修改 modified 的提示。

     后来查询 ignorecase 这个设置应该是对于 文件名 的大小写敏感,和内容应该没有太大关系。

    再次执行 git --unset-all ignorecase 删除掉设置的大小写属性,git config ignorecase true 设置为大小写不敏感,毕竟我们不需要检测文件名的大小写。

    2. 文件被忽略了?

    既然不是大小写的文件,看来是提交文件被忽略了。查看 .gitignore 文件,发现并没有忽略掉这个文件,更为诡异的是删除了这个文件也不提示错误,但是执行 git checkout -- [FILE_NAME] 却是可以恢复这个文件。

    有点抓狂,究竟是什么导致了这样呢?

    3.  index 文件被忽略了

    遍寻不得要领后,选择git clone 远端仓库的版本,修改同样的文件,竟然可以检测到文件的modified状态 

    看来 文件不能被监测到状态变化的原因是 本地仓库被设置了某种奇怪的属性。

    但是是什么属性,一时又找不到原因。就暂且放置了,还好远端仓库已经提交了同样的版本。

    接着又把 《Git 权威指南》找出来翻看,翻到 Git暂存区 这章节的内容的时候,突发奇想,既然 index 文件是二进制文件,如何查看它的内容呢,于是度娘一番,

    git ls-files --stage 可以查看 index 保存的文件索引的内容,既然可以查看内容,

    那么 index 中 有没有过滤设定呢?

    重点来了,参考博客,执行 git ls-files -v 竟然真的可以看到 那个文件有 h 标记,其他正常追踪的文件是 H 标记。

    1 git update-index –assume-unchanged –path 可以忽略文件 
    2 git update-index –no-assume-unchanged –path 可以取消忽略文件 

    于是执行  git update-index -no-assume-unchanged [FILE_NAME]

    终于,追踪到了文件的修改状态。(擦汗!!!)

    参考博客:

    [1]. git update-index --assume-unchanged 找出所有被忽略的文件的办法

  • 相关阅读:
    Codeforces Round #461 (Div. 2)B-Magic Forest+位运算或优雅的暴力
    动态规划:树形DP
    动态规划:划分DP
    动态规划:状压DP
    图论:树的直径
    图论:点分治
    图论:2-SAT
    数据结构&图论:K短路-可持久化可并堆
    图论:次短路
    图论:曼哈顿距离最小生成树
  • 原文地址:https://www.cnblogs.com/yqmcu/p/10346410.html
Copyright © 2011-2022 走看看