使用git pull时下载所有未变更文件的问题咨询
解决Git Pull/Sourcetree 重复下载未变更文件的问题
问题根源
- Windows系统文件时间戳精度问题:Git靠文件修改时间(mtime)快速判断文件状态,但Windows的mtime精度有限,或是某些程序仅修改了文件的保存日期却没改内容,导致Git误判文件需要重新检出。
- Git配置异常:比如
core.autocrlf行尾转换设置不当,会让Git在检出时自动修改行尾符,看似内容没变但实际已被Git标记为变更;core.filemode开启后,Windows下的权限变动也会被误判为文件变更。 - Sourcetree额外操作:Sourcetree可能在pull后自动执行了
git reset --hard这类强制覆盖命令,哪怕文件内容一致也会重新下载。
解决步骤
让Git忽略文件时间戳的微小变动
执行命令关闭Git对文件创建/变更时间(ctime)的信任,只靠内容哈希判断文件状态:git config core.trustctime false调整行尾转换配置
统一行尾转换规则,避免Git频繁修改文件:# 适合跨平台团队,仅在提交时转换为LF,检出时保持原格式 git config core.autocrlf input # 若仅在Windows环境,可设置为true,检出时转换为CRLF,提交时转回LF # git config core.autocrlf true注意:团队成员需统一配置,否则会反复触发文件变更。
关闭文件权限检测
Windows下不需要检测文件权限,执行命令关闭该功能:git config core.filemode false排查Sourcetree的pull设置
打开Sourcetree的「偏好设置」-「Git」,检查是否勾选了“Pull时强制覆盖本地文件”类选项,或是自动执行重置操作。也可以直接在终端跑git pull,如果终端执行正常,说明问题出在Sourcetree的额外配置。重置本地Git状态(谨慎操作)
若以上方法无效,可重置本地文件让Git重新计算所有文件哈希:git reset --hard HEAD git clean -fd警告:这个命令会清除所有未提交的本地修改,执行前务必备份或提交重要更改。
内容的提问来源于stack exchange,提问作者Gennaro Cirillo
相关产品推荐
相关产品推荐

