linux - Git 成功暂存文件但未能提交文件
问题描述
Git通过git add
(它们显示在“要提交的更改”下)成功地暂存文件,但是当我git commit -m "commit message"
和朋友们运行时,该命令会默默地失败(echo $?
显示1
)并且我的文件仍然坐在那里列为“要提交的更改”.. .
其他类似的问题提出了一些建议,例如:
- 该
.git
文件可能已损坏,解决方案是重新克隆到单独的目录,将更改的文件复制到那里,然后重新尝试添加/提交周期。这没有帮助。 - 文件存在某种权限问题,
chmod 755
在重试之前。这与我无关,因为文件已经存在0755
。 - 重新启动计算机。我实际上确实尝试过这个(因为谁知道)但它没有帮助。
解决方案
在调试我的问题时,我最终确实找到了指出GIT_TRACE
环境变量的人。我跑了:
export GIT_TRACE=1
在这样做之后,我重新运行了失败的提交命令。现在我看到,在死之前,它实际上是在尝试在git diff
后台运行,作为其提交过程的一部分。我在通过 SO 进行广泛搜索时看到,git diff
由于内存不足,有时可能会在大文件上失败,但这似乎与我无关,因为我试图这样做git commit
。有问题的文件实际上是大型文本文件(几 MB)。
最终的解决方案是创建一个.gitattributes
文件,其条目如下(有点像,.gitignore
但末尾带有 binary 关键字):
problem/file/path/or/pattern binary
这样 git 会将文件视为二进制文件而不运行 diff (因此不会耗尽内存,也不会提交失败)。这对我来说是一个可以接受的解决方案,因为我真的不需要更改跟踪或此特定文件上的任何内容。
推荐阅读
- binary-search-tree - 验证二叉搜索 Tree-1
- javascript - 如何使用过滤器获取数据?
- azure - 将输出传递给 azure 发布管道中的新作业
- haskell - Snap:在处理程序中捕获 snaplet-postgresql-simple 异常
- python - Scrapy Splash 截图网页从 png 到 webp 不保存渲染图像
- javascript - 在 HTML 上的两个图像之间切换
- php - 自定义颜色项-行 css 取决于组 id、vue、html
- javascript - 随机化搜索列表的内容
- php - 如何在 Cakephp2.x 中为夹具定义十进制数据类型?
- excel - 检查两列的条件,并相应地填充 excel 中第三列的值