Git diff显示幻像变化

时间:2018-03-13 17:53:57

标签: git

当我在Windows上克隆存储库时,我看到Git状态中的未分级更改,而不进行任何工作树更改。 git diff表示发生了一些更改,例如

-tablespace development
-storage(initial 10K next 10K maxextents 999);
+tablespace &tablespace
+storage(initial &initial next &next maxextents 999);

但是,如果我使用文本编辑器编辑同一文件,则不存在这些文件。

在另一个(Linux)系统上克隆相同的存储库,我没有同样的问题。这让我相信我的桌面上配置了一些钩子或其他预处理步骤。

我在$GIT_DIR/hooksC:\Program Files\Git\etcC:\Program Files\Git\mingw\etc中找不到任何有效的挂钩。

使用--no-textconv git diff开关无效。

git add .导致37个“已更改”文件中只有1个被编入索引,其余文件仍显示为未分级更改。

我的智慧结束了。有什么想法可能导致Git显示这些幻象差异?

请求的文件:

# .gitattributes
*           text=auto
*.txt       text
*.vcproj    text eol=crlf
*.sh        text eol=lf
*.shl       text eol=lf
*.jpg       -text

# .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = <repo url>
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

另请注意,git config -l显示

...
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.required=true
filter.lfs.process=git-lfs filter-process
...

1 个答案:

答案 0 :(得分:1)

可能存在一些名称相同但案例不同的文件,例如fooFoo。典型的不区分大小写的Windows文件系统只能存储一个。 Git可能会把它与另一个混淆。

对于传统上Unix独占的项目来说,这是一个不常见的问题。 OS X用户将遇到类似的问题。

短期解决方案是创建一个小的区分大小写的文件系统。在OS X上,您可以创建区分大小写的磁盘映像。我不确定Windows。

长期解决方案是重命名冲突文件并使其项目策略不使用重叠文件。这将使该项目对Windows和OS X贡献者更友好。