Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在git中更改分支会错误地导致修改文件_Windows_Git_Github_Line Endings_Gitattributes - Fatal编程技术网

Windows 在git中更改分支会错误地导致修改文件

Windows 在git中更改分支会错误地导致修改文件,windows,git,github,line-endings,gitattributes,Windows,Git,Github,Line Endings,Gitattributes,我在Windows上使用git(1.8.3)。如果我从github克隆了一个repo,然后立即签出该repo上的另一个现有分支,git会检测修改过的文件。通常有时候不是。所有修改过的文件上的差异都是相同的(包括行尾)。在我的团队中,在至少4台不同PC上的2个不同回购协议上观察到了这个问题 它并不总是相同的文件,但它几乎总是rep中几个文件子集中的一个。例如,有时候repo根目录中有相同的5个文件,有时候在一个特定文件夹中有相同的93个文件,有时候在不同文件夹中有相同的16个文件 一旦git将文件

我在Windows上使用git(1.8.3)。如果我从github克隆了一个repo,然后立即签出该repo上的另一个现有分支,git会检测修改过的文件。通常有时候不是。所有修改过的文件上的差异都是相同的(包括行尾)。在我的团队中,在至少4台不同PC上的2个不同回购协议上观察到了这个问题

它并不总是相同的文件,但它几乎总是rep中几个文件子集中的一个。例如,有时候repo根目录中有相同的5个文件,有时候在一个特定文件夹中有相同的93个文件,有时候在不同文件夹中有相同的16个文件

一旦git将文件标记为已修改,如果我将其还原或隐藏,它们将立即再次标记为已修改,这使得无法在分支之间来回切换

我感觉它与行尾有关,但是我已经添加了推荐的.gittributes文件和每个分支,但是我仍然有这些零星的问题。我想到的另一种可能性是分支之间的合并,不知怎么搞砸了我所做的重整化,但我不知道如何检验这个理论

我们都有
core.autocrlf=true
,因为我们都在Windows上。这是我们的.git属性

# Auto detect text files and perform LF normalization
* text=auto

# Custom for Visual Studio
*.cs      diff=csharp
*.sln     merge=union
*.csproj  merge=union
*.sqlproj merge=union
*.html    text diff=html
*.css     text
*.js      text
*.ejs     text
*.sql     text

# Standard to msysgit
*.doc     diff=astextplain
*.DOC     diff=astextplain
*.docx    diff=astextplain
*.DOCX    diff=astextplain
*.pdf     diff=astextplain
*.PDF     diff=astextplain

在两种情况下,我见过这种事情发生:

  • 行尾和Git试图跨平台处理这些问题的所有疯狂选项。(我自己根本不使用这些功能,我更喜欢存储和处理所有具有一致LF行结尾的文件,包括在Windows上。)

  • 具有两个或多个文件的存储库,其名称仅在大小写时不同。例如,
    readme.txt
    readme.txt
    。Windows上的Git很难处理这些情况,因为只有一个底层文件可以通过两个不同的名称访问

事情就这么简单:这是一个具有意外后果的全球性环境

如果您有某些类型的文档要按eol进行管理,请仅通过和进行管理

这意味着:首先摆脱所有目录自动更改eol(如您的
*text=auto
),将该修改推回到上游回购,然后查看问题是否仍然存在

然后,也只有到那时,才重新引入这些指令,不是针对每个文件(不是针对“
*
”),而是针对您绝对希望eol规范化的文件。

检查是否有效。

是否有可能提供一个可重复的问题示例?关于区分大小写:也许
git ls文件
可以帮助您查看git存储了什么(不过,我没有windows机器来测试它……)