Windows 在git中更改分支会错误地导致修改文件
我在Windows上使用git(1.8.3)。如果我从github克隆了一个repo,然后立即签出该repo上的另一个现有分支,git会检测修改过的文件。通常有时候不是。所有修改过的文件上的差异都是相同的(包括行尾)。在我的团队中,在至少4台不同PC上的2个不同回购协议上观察到了这个问题 它并不总是相同的文件,但它几乎总是rep中几个文件子集中的一个。例如,有时候repo根目录中有相同的5个文件,有时候在一个特定文件夹中有相同的93个文件,有时候在不同文件夹中有相同的16个文件 一旦git将文件标记为已修改,如果我将其还原或隐藏,它们将立即再次标记为已修改,这使得无法在分支之间来回切换 我感觉它与行尾有关,但是我已经添加了推荐的.gittributes文件和每个分支,但是我仍然有这些零星的问题。我想到的另一种可能性是分支之间的合并,不知怎么搞砸了我所做的重整化,但我不知道如何检验这个理论 我们都有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将文件
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
。Windows上的Git很难处理这些情况,因为只有一个底层文件可以通过两个不同的名称访问readme.txt
*text=auto
),将该修改推回到上游回购,然后查看问题是否仍然存在
然后,也只有到那时,才重新引入这些指令,不是针对每个文件(不是针对“*
”),而是针对您绝对希望eol规范化的文件。检查是否有效。是否有可能提供一个可重复的问题示例?关于区分大小写:也许
git ls文件
可以帮助您查看git存储了什么(不过,我没有windows机器来测试它……)