在git clone之后直接显示修改的文件

我现在遇到一个版本库的问题,尽pipe我的git-fu通常很好,但我似乎无法解决这个问题。

当我克隆这个仓库,然后cd到仓库,git-status显示了几个文件被更改。 注:我没有在任何编辑器或任何东西打开回购。

我试着按照这个指南: http : //help.github.com/dealing-with-lineendings/,但是这并没有帮助我的问题。

我试过git checkout -- . 很多次,但似乎没有做任何事情。

任何帮助/想法将不胜感激

更新1:我在Mac上,回购本身没有子模块。

更新2:文件系统是Mac上的“Journaled HFS +”文件系统,不区分大小写。 这些文件是单行的,每个约79K(是的,你听到的权利),所以看着git diff是不是特别有用。 我听说做的git config --global core.trustctime false ,这可能会帮助,我会尝试当我回到计算机上的回购。

更新3:用事实改变了文件系统的细节! 并且,我尝试了git config --global core.trustctime false技巧,这个技巧并没有很好地发挥作用。

克隆回购之后,我在Mac上遇到了同样的问题,它会假定所有文件都已更改。

运行git config --global core.autocrlf input它仍然将所有文件标记为已更改。 find一个修复后,我遇到了.gitattributes文件在主目录中有以下几点。

 * text=auto 

我从现在开始评论说,其他任何克隆版本库都正常工作。 希望这可以帮助那里的任何人。

我知道了。 所有其他的开发人员都在Ubuntu(我认为),因此有区分大小写的文件系统。 但是,我不(因为我在Mac上)。 当我用git ls-tree HEAD <path>查看它们时,确实所有的文件都是小写的双胞胎。

我会让他们中的一个把它整理出来。

 git config core.fileMode false 

在我的情况下解决了这个问题

https://www.kernel.org/pub/software/scm/git/docs/v1.7.10.1/git-config.html

TL; DR;

core.fileMode

如果为false,则忽略索引和工作树之间的可执行位差; 有用的破碎的文件系统,如FAT。 请参阅git-update-index(1)。

默认值是true,除非git-clone(1)或者git-init(1)会在创build仓库时探测和设置core.fileMode为false。

我假设你正在使用Windows。 你链接的github页面有细节倒退。 问题是,CRLF行结束已经被委托给repo了,因为你把core.autocrlf设置为true或者input ,git想把行结束转换成LF,所以git status显示每个文件都被改变了。

如果这是一个你只想访问但是没有涉及到的回购,可以运行下面的命令来隐藏这个问题而不需要真正的解决它。

 git config core.autocrlf false 

如果这是一个回购,您将积极参与并可以进行更改。 您可能希望通过提交更改所有行结束的代码来使用LF来代替CRLF,然后采取措施防止它再次发生。

以下内容直接来自gitattributes手册页 ,应该从干净的工作目录执行。

 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状态显示,请在运行git add -u之前取消其文本属性。

 manual.pdf -text 

相反,git没有检测到的文本文件可以手动启用规范化。

 weirdchars.txt text 

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

 # Remove everything from the index. git rm --cached -r . # Write both the index and working directory from git's database. git reset --hard 

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

 * text=auto 

该行靠近文件的顶部。 我们只需要在它的前面添加一个#来评论这一行。 这样做后,事情按预期运作。

这个问题也可能是由于不同的文件权限造成的 ,就像我的情况一样:

新鲜的克隆库(Windows,Cygwin):

 $ git ls-tree HEAD 100755 blob 8099ea496a2c78d71125d79a05855f60ebf07904 testfile ↑↑↑ 

裸远程存储库(Linux):

 $ git ls-tree HEAD 100644 blob 8099ea496a2c78d71125d79a05855f60ebf07904 testfile ↑↑↑ 

我有同样的问题。 还有一台Mac。 看一下linux机器上的repo,我注意到我有两个文件:

geoip.dat和GeoIP.dat

删除了linux机器上不推荐使用的版本,并将版本库再次克隆到mac。 如果有重复,我无法从存储库的副本中提取,提交,存储或提取。

我想添加一个更为直接的“为什么”发生这样的答案,因为已经有一个很好的答案如何解决这个问题。

所以, .gitattributes有一个* text=auto设置,导致这个问题。

在我的情况下,GitHub主分支上的文件有\r\n结尾。 我已经调用了回购的设置来检查\n结尾。 我不知道git检查了什么。 它应该检查与我的Linux机器上的本机结尾( \n ),但我想它检出了\r\n结尾的文件。 Git抱怨,因为它看到在回购中签出的\r\n结局,并警告我会检查\n设置。 因此文件是“被修改”的。

这是我现在的理解。

我也有同样的问题。 在我的情况下,我克隆了回购和一些文件立即失踪。

这是由文件path引起的,文件名对于Windows来说太长了。 要解决它回购尽可能靠近硬盘根目录,以减less文件path的长度,例如克隆到C:\ A \ GitRepo而不是C:\用户文档\ YYY \桌面\ GitRepo

编辑文件名为: 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 

filemode = true更改为filemode = false

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

我发现git正在处理我的文件(在这种情况下是.psd)作为文本。 将它设置为.gitattributes中的二进制types解决了它。

 *.psd binary