我有一个非常旧的 git 存储库(大约有六年了),并注意到我没有看到我对我的文件中的文件所做的更改git status
output.
我对有问题的特定文件运行了命令:
$ git status Data/schema.sql
$
并且没有输出!该文件从一开始就位于存储库中。此外,如果我将存储库签出到另一个目录,该文件(奇怪的是)会出现在那里。
我看到同样的git diff Data/schema.sql
and git log Data/schema.sql
.
一般来说,当发生类似的事情时,gitignore
问题。但即使删除我的.gitignore
文件不会导致此行为发生任何变化。
什么可能导致这种行为?
这种“症状”有两种可能的“诊断”:
历史上不区分大小写的强制重命名
诊断:
git ls-files
搜索具有不同大小写的路径:
some/path/foo
Some/path/bar
Solution
git mv -f Some/path/* some/path/
移动所有文件很重要(/*
) 到重命名的路径。现在他们都将拥有一条单一的路径。
可能的原因
可能有一种情况,当some/path
有几个文件,通过路径中的不同字母大小写进行跟踪。对于提供“不正确”路径的此类文件git log
or git status
导致日志输出中缺少某些提交。
此错误可通过以下方式重现git mv -f <path/file> <PATH/file>
在 Git 1.9.5 上,也许在更新的版本上(稍后检查)。
git log Some/path/foo
日志将not包含之前所做的一些提交git mv -f some/path/bar Some/path/bar
被处决。
标有 a 的文件skip-worktree
or assume-unchanged bit
感谢@Zeeker 的这个假设。
诊断:
git ls-files -v | grep -E '^(S|[a-z])'
有关更多信息,请查看git ls-files文档 http://git-scm.com/docs/git-ls-files.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)