在Git克隆后直接显示为已修改的文件

在Git克隆后直接显示为已修改的文件,git,git-clone,Git,Git Clone,目前我在存储库方面遇到了一个问题,尽管我的Git-fu通常很好,但我似乎无法解决这个问题 当我克隆此存储库,然后将cd克隆到存储库中时,git status会显示几个已更改的文件。注意:我没有在任何编辑器或任何东西中打开存储库 我试着遵循以下指南:,但这对我的问题毫无帮助 我已经尝试了很多次git签出--.,但它似乎没有任何作用 我在Mac上,存储库本身没有子模块 该文件系统是Mac上的“日志HFS+”文件系统,不区分大小写。这些文件只有一行,每行大约79KB(是的,你听对了),因此查看git

目前我在存储库方面遇到了一个问题,尽管我的Git-fu通常很好,但我似乎无法解决这个问题

当我克隆此存储库,然后将
cd
克隆到存储库中时,
git status
会显示几个已更改的文件。注意:我没有在任何编辑器或任何东西中打开存储库

我试着遵循以下指南:,但这对我的问题毫无帮助

我已经尝试了很多次git签出--.,但它似乎没有任何作用

我在Mac上,存储库本身没有子模块

该文件系统是Mac上的“日志HFS+”文件系统,不区分大小写。这些文件只有一行,每行大约79KB(是的,你听对了),因此查看
git diff
并没有特别大的帮助。我听说过做
git config--global core.trustctime false
,这可能会有所帮助,当我回到有存储库的计算机上时,我会尝试一下


我用事实改变了文件系统的细节!我尝试了git config--global core.trustctime false技巧,但效果不太好。

我假设您使用的是Windows。您链接到的GitHub页面的详细信息是反向的。问题是CR+LF行尾已经提交到存储库中,并且因为您已将core.autocrlf设置为trueinput,Git希望将行尾转换为LF,因此
Git status
显示每个文件都已更改

如果这是一个您只想访问但不想参与的存储库,则可以运行以下命令来隐藏问题,而不实际解决问题

git config core.autocrlf false

如果这是一个您将积极参与并可以提交更改的存储库。您可能希望通过提交将存储库中的所有行尾更改为使用LF而不是CR+LF来修复此问题,然后采取措施防止将来再次发生这种情况

以下内容直接取自,应在干净的工作目录中执行

echo "* text=auto" >>.gitattributes
rm .git/index     # Remove the index to force Git to
git reset         # re-scan the working directory.
git status        # Show files that will be normalized.
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"
如果在
git status
中显示任何不应规范化的文件,请在运行
git add-u
之前取消设置其文本属性

manual.pdf      -text
相反,Git没有检测到的文本文件可以手动启用规范化

weirdchars.txt  text

我明白了。所有其他开发人员都在Ubuntu上(我想),因此都有区分大小写的文件系统。一、 但是,不要(因为我在Mac电脑上)。事实上,当我使用
gitls-tree-HEAD
查看所有文件时,它们都是小写的双胞胎


我会让他们中的一个来解决这个问题。

克隆存储库后,我在Mac上也遇到了同样的问题。它将假定所有文件都已更改

在运行了git config--global core.autocrlf input之后,它仍然将所有文件标记为已更改。在查找修复程序后,我在主目录中遇到了
.gittributes
文件,其中包含以下内容

* text=auto

我把它注释掉了,从现在起,任何其他克隆存储库都可以正常工作。

我也遇到了同样的问题。还有一台Mac电脑。查看Linux机器上的存储库,我注意到我有两个文件:

geoip.dat和geoip.dat


我在Linux机器上删除了不推荐的一个,并将存储库再次克隆到Mac上。当存在重复项时,我无法从存储库的副本中提取、提交、隐藏或提取。

在Visual Studio中,如果您使用的是Git,则可以自动生成.gitignore和.gitattributes文件。自动生成的.getattributes文件包含以下行:

* text=auto

这一行靠近文件的顶部。我们只需要在前面加一个#来注释这行。做了那件事之后,一切都如期进行。

我也遇到了同样的问题。在我的例子中,我克隆了存储库,一些文件立即丢失


这是由于文件路径和文件名对于Windows太长造成的。要解决此问题,请将存储库克隆到尽可能靠近硬盘驱动器根目录的位置,以减少文件路径的长度。例如,将其克隆到
C:\A\GitRepo
而不是
C:\Users Documents\yyy\Desktop\GitRepo
,我想添加一个更直接的答案,说明“为什么”会发生这种情况,因为关于如何修复它,已经有了一个很好的答案

因此,
.gittributes
有一个
*text=auto
设置,这导致了这个问题

在我的例子中,GitHub主分支上的文件有
\r\n
结尾。我已拨出存储库上的设置以使用
\n
结尾签入。我不知道Git检查出了什么。它应该以本机结尾签出到我的Linux机器上(
\n
),但我猜它是以
\r\n
结尾签出文件的。Git抱怨,因为它看到存储库中的签出
\r\n
结尾,并警告我它将签入
\n
设置。因此,文件将被“修改”


这是我目前的理解。

问题也可能来自不同的文件权限,就像我的情况一样:

新克隆的存储库(Windows、Cygwin):

裸远程存储库(Linux):


请运行以下命令。这可能会解决问题

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

我将本地存储库复制到另一个文件夹,出现了一堆修改过的文件。 我的解决方法是:我隐藏了修改过的文件并删除了隐藏的文件。仓库变得干净了

git config core.fileMode false
在我的案例中解决了这个问题

TL;博士

core.fileMode

如果为false,则忽略索引和工作树之间的可执行位差异;在FAT等损坏的文件系统上很有用。请参阅git更新索引(1)

默认值为true,但当repo
# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard
git config core.fileMode false
*.psd binary
sudo gedit .git/config
sudo vim .git/config
[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true

[remote "origin"]
    url = kharadepramod@bitbucket.org:DigitalPlumbing/unicorn-magento.git
    fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]
    remote = origin
    merge = refs/heads/master

[branch "productapproval"]
    remote = origin
    merge = refs/heads/productapproval
git rm -rf the-folder-with-modified-stuff
git ci -m 'WAT'
# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard
# Local Git configuration
git config core.ignorecase true
# Global Git configuration
git config --global core.ignorecase true