特定文件不断从git中删除

特定文件不断从git中删除,git,azure-devops,Git,Azure Devops,我们将azure devops与git存储库一起使用。我们主要产品的git存储库最近显示了一些奇怪的行为。大约三周后,基于特定开发分支签出分支后,存储库中的特定(项目)文件就不存在了。当我查看存储库时,文件实际上存在于存储库中 我们首先在pull请求构建期间遇到该行为。构建失败,因为它说它找不到特定的文件,即使该文件存在于分支中。通过在某个位置添加空间来更改文件,可以暂时修复此问题 最近,我发现当我切换到某些分支时,同一文件有时会在本地开发pc上显示为挂起的删除更改,尽管我从未删除过该文件 我已

我们将azure devops与git存储库一起使用。我们主要产品的git存储库最近显示了一些奇怪的行为。大约三周后,基于特定开发分支签出分支后,存储库中的特定(项目)文件就不存在了。当我查看存储库时,文件实际上存在于存储库中

我们首先在pull请求构建期间遇到该行为。构建失败,因为它说它找不到特定的文件,即使该文件存在于分支中。通过在某个位置添加空间来更改文件,可以暂时修复此问题

最近,我发现当我切换到某些分支时,同一文件有时会在本地开发pc上显示为挂起的删除更改,尽管我从未删除过该文件

我已经尝试过删除该文件,提交该文件,并在新的提交中恢复该文件,但问题似乎没有消失

我已经运行了
git fsck
,它只返回一些悬空对象

有人知道这里发生了什么吗

更新: 我们又经历了一次
git ls files
仅列出了代理上存在问题的25个文件。在本地repo上运行相同的命令时,它会返回一个似乎是repo的完整文件列表的列表。有趣的是,不断消失的文件可能是代理上列出的25个文件之一。切换到其他分支时,文件将重新显示。我已经仔细检查了,文件没有在未显示的分支中删除。此外,当从合并分支切换回源分支并重新切换到合并分支时,文件不会显示。有什么想法吗


注意:正在删除该文件。提交,重新添加文件并删除空间,然后提交->再次修复它(可能是暂时的)

您没有为我们提供足够的信息来确定问题,但以下详细信息:

最近,我发现当我切换到某些分支时,同一文件有时会在本地开发pc上显示为挂起的删除更改,尽管我从未删除过该文件

建议您签入了两个文件,其名称仅在大小写上有所不同

在git bash中运行此命令(用
filename
替换项目文件的实际名称):

我怀疑您会看到列出的条目不止一个,例如:

100644 a5675676e903973a412f7aaa0a07ad45f586c02b 0   filename
100644 db0cc477c38714c4ee77b0bf462a7b7156a066a2 0   FileName
git rm --cached filename
git rm --cached FileName
git add filename
这是因为git存储文件名时区分大小写,而Windows存储文件时不区分大小写(但保留大小写)。在同样区分大小写的平台上,有人添加了一个名称类似的文件(仅大小写不同),或者有人错误地更改了
core.ignoreCase
的值,错误地认为这是一个配置设置(事实并非如此,它缓存了有关本地文件系统的信息,更改它将导致类似这样的问题)

要修复它,请对各种文件名运行
git rm--cached
,然后对正确的文件名运行
git add
。例如:

100644 a5675676e903973a412f7aaa0a07ad45f586c02b 0   filename
100644 db0cc477c38714c4ee77b0bf462a7b7156a066a2 0   FileName
git rm --cached filename
git rm --cached FileName
git add filename

并使用
git log
确定哪些同事错误地更改了git配置,并确保他们不再这样做。

当您说此文件“不存在”时,它是仅从工作树中丢失的,还是同时从工作树和Git的索引(也称为暂存区域)中丢失的?如果是前者,请在Git创建文件后立即在计算机上查找正在删除该文件的内容。我不确定如何检查具体情况。但是,我们在多台不相关的计算机(客户端和服务器)上存在此问题。因此,我认为计算机上其他东西删除此文件的可能性非常小。要(直接)检查索引/暂存区域中的文件,请使用
git ls files
(注意,它是用于脚本的,不是一个用户友好的命令)。比较“好”例如,系统或签出到一个坏的分支。git show ref的输出是什么?我想我的问题是-您是否有任何只在大小写上不同的分支名称?以避免要求您粘贴您(合理地)选择的分支列表可能不希望这样做,此命令将告诉您是否有任何发生冲突的分支名称:
git show ref--head | tr A-Z A-Z | awk'{print$2}'| sort | uniq-c | awk'{$1=$1;print}“|grep-v“^1”
不幸的是,情况并非如此。
git ls文件
只返回一行缺少的项目文件。您说您缺少识别问题的信息。如果您让我知道您想要什么信息,我很高兴提供更多信息。唉,这感觉像是一个很好的猜测。:Dhonor where honor到期了,今天我们发现确实有一个外壳问题,但是在文件路径的更深处。我们修复了外壳,希望没有问题。