Git通过git add
成功地暂存了文件(它们显示在"要提交的更改"下(,但当我运行git commit -m "commit message"
和朋友时,命令会无声地失败(echo $?
显示1
(,我的文件仍然放在那里,列为";要提交的更改";。。。
其他类似的问题提出了如下建议:
.git
文件可能已损坏,解决方案是将其重新克隆到一个单独的目录中,将更改的文件复制到那里,然后重新尝试添加/提交周期。这无济于事- 文件存在某种权限问题,请在重试之前访问
chmod 755
。这与我无关,因为文件已经是0755
- 正在重新启动计算机。我确实试过这个(因为谁知道呢(,但没有帮助
在调试我的问题时,我最终找到了指出GIT_TRACE
环境变量的人。我跑了:
export GIT_TRACE=1
完成此操作后,我重新运行了失败的commit命令。现在我看到,在即将结束之前,它实际上试图在引擎盖下运行git diff
,作为其提交过程的一部分。我在对SO进行广泛搜索时发现,有时git diff
会因内存不足而在大文件上失败,但这似乎与我无关,因为我正在尝试git commit
。有问题的文件实际上是大型文本文件(几MB(。
最终的解决方案是创建一个.gitattributes
文件,其中包含如下条目(有点像.gitignore
,但末尾带有二进制关键字(:
problem/file/path/or/pattern binary
通过这种方式,git将文件视为二进制文件,并且不运行diff(因此不会耗尽内存,也不会提交失败(。这对我来说是一个可以接受的解决方案,因为我真的不需要对这个特定文件进行更改跟踪或任何事情。