以下git status
输出显示已删除和未跟踪的文件:
$ git status
On branch bugfix/1386ReferredBySlow
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Broker/Controllers/InHouseAgentsController.cs
modified: Broker/Web.config
deleted: CompanyNameEnterprise.EF/App.Config
modified: CompanyNameEnterprise.Services/Web.config
Untracked files:
(use "git add <file>..." to include in what will be committed)
CompanyNameEnterprise.EF/App.config
文件CompanyNameEnterprise.EF/App.config
既被“删除”又被“未跟踪”。这两个国家似乎是矛盾的。
git在什么情况下可以显示文件是未跟踪和删除的?
我的同事通过重新克隆项目来解决问题(并破坏了证据)。但我想知道为什么会发生这种情况,所以我们知道下次该做什么。
答案 0 :(得分:5)
似乎问题与忽略文件名的大小有关:未跟踪的文件名有一个小写的&#39; c&#39;而删除的一个大写&#39; C&#39;也许该文件已重命名?!
我认为core.ignorecase
配置变量可以提供帮助:doc(如果设置不正确,则不行。)
如果为true,则此选项启用各种变通方法,以使Git能够更好地处理不区分大小写的文件系统,如FAT。 ...
使用git config --get --show-origin core.ignorecase
检查其值和来源。
答案 1 :(得分:1)
当您删除文件,将删除添加到舞台并重新创建此文件时,会发生这种情况。文件将出现在分段和未跟踪的部分。
您可以使用git diff
和git diff --staged
重现的步骤:
答案 2 :(得分:1)
CompanyNameEnterprise.EF/App.config
不是modified
,而是deleted
。换句话说,它存在于最后一次提交中,但不存在于索引中(也称为“暂存区域”)。
确实没有跟踪,即存在于磁盘上但不在索引中。
总而言之,它存在于最后一次提交和磁盘上,但不存在于索引中。例如,在文件上运行git rm --cached
之后就会发生这种情况。