vscode git 文件内容未修改,却显示在 changes里面

目录

一、问题

二、原因及解决方法

三、总结


tiips:如嫌繁琐,直接移步总结即可!

一、问题

1.bug修复到了旧的分支上了,新迁移的库中没有这些bug修复,一个个找对应的文件修改太麻烦了,于是想把修改的分支上上的代码全部 复制过来。但是复制过来之后发现,changes里面显示的修改文件有 500+,然后实际修改的文件只有 10+。如图1-1所示

图 1-1

二、原因及解决方法

1.网上找了各种方法,没有效果,还因为全局设置了  .gitconfig 配置导致 新拉的git代码文件修改后不显示,详见 https://blog.csdn.net/qq_45327886/article/details/139301362?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139301362%22%2C%22source%22%3A%22qq_45327886%22%7D

2.仔细对比了一下 两个文件的属性,发现新库中的git clone文件(被git托管)git 仓库 download下载下来的文件 内容是完全一致的,但是 大小不一样。具体如下图2-1所示。

不知道为什么,猜测是 被git托管的文件还包含了git相关的隐藏信息

图 2-1

3.download下来的不一样,那我 git clone 以前旧仓库的代码,应该就一样了吧。

操作了一下,果真是一样的,如图 2-2 所示

图 2-2

4.现在把 旧的git托管的代码 复制到 新的git托管代码上去,就发现 changes的数量是正确的了。

5.又试了,vscode 显示 500+变更时,git diff --stat 看到实际修改的文件:控制台输出警告

warning: LF will be replaced by CRLF in apps/mems-web/src/assets/css/fonts.scss.
The file will have its original line endings in your working directory。

网上搜索到是因为 不同平台的换行符不一致导致的,windows:crlf,  ma,linux:lf

设置了 core.autocrlf=false,问题解决了。

综述所述,上述问题可以尝试以下两种方式解决

方式一: 尝试步骤3,4,旧代码和新代码都使用 git仓库托管的。

方式二:git diff --stat 查看实际被修改的文件,如果有 LF will be replaced by CRLF的警告,设置 core.autocrlf=false :任意终端里面执行命令 git config  --global core.autocrlf false即可

6.git clone的文件和 git download的文件大小为什么不一样?

   根据 warning: :LF will be replaced by CRLF以及上面的问题,猜测:git托管的文件在windows上都自动转成了 CRLF(\r\n), git download下来的文件以 LF(\n) 结尾,git download的文件字符较少,所以文件小一些直接把git download下来的文件 复制到 git项目里面,文件以 LF结尾,和git 托管的文件结尾方式不一致,所以 会出现在changes里面。当设置autocrlf=false后,忽略了结尾符号的不同,所以不会出现在changes里面了。

    验证:git Bash里面可以查看到两个文件的换行结尾确实不同,如图 2-3 所示

git clone的文件以  CRLF结尾;git download的文件以  LF结尾

图 2-3

三、总结

1.当你复制文件时,遇到 git changes修改数量超过实际数量(未修改的文件也显示在changes里面),可以尝试以下两种解决方式:

方式一:被复制的文件 和 目标文件 都采用 git clone的 

方式二:git diff --stat 查看实际被修改的文件,如果有 LF will be replaced by CRLF的警告,设置 core.autocrlf=false:任意终端里面执行命令 git config  --global core.autocrlf false即可

        不推荐方式二,因为windows用户编辑文件时会用 CRLF,设置了git托管的代码使用 LF,导致 

CRLF和LF混用,跨平台开发时可能会产生各种奇怪的问题。另外不建议随便设置全局属性,可能会导致其他奇怪的问题,详见二.1描述。

2.git clone的文件 和 git download的文件大小不一样:git 上文件默认都是 以 LF为换行符结尾的(git是国外的软件,国外软件一般都是mac或unix操作系统,以LF结尾);git clone的文件以  CRLF结尾(会默认转换);git download的文件以  LF结尾,后者字符更少,所以文件更小一些。

  

/*

希望对你有帮助!

如有错误,欢迎指正,非常感谢!

*/

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值