在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