Git 致命错误:无法写入 new_index 文件

Git 致命错误:无法写入 new_index 文件

我们是一家正在向 Git 转型的网络开发公司。

最终,我们打算完全在本地运行它,但目前我们的开发网站托管在 Linux 服务器上,Git 存储库也位于此处(我通过自己的机器上的 Tower 创建)。

我们的开发人员通过 AFP(Mac)或 Samba(Windows / Linux)连接到该服务器,并使用 Tower 和 Sourcetree 的组合来检查这些更改。

此服务器上的 Web 开发文件夹是共享的,并经过了许可,因此所有读取/写入操作均以 www-data 用户身份完成。无论如何,这都不理想,而且我也不会在生产中这样做,但对我们来说,这很有效。大多数情况下......

每当尝试暂存修改后的文件或提交它们时,就会收到此错误消息:

fatal: unable to write new_index file

有时它只是“索引”,没有“new_”前缀。

我发现以 www-data 用户身份通过​​ SSH 连接到服务器,然后 cd 到项目内的 .git 文件夹,然后将 index 重命名为其他名称并重新命名,通常可以解决此问题。在此之前和之后,文件的权限 (660) 都是正确的,但重命名技巧似乎有效。

除了让 Git / 网站在开发人员自己的机器上运行这一明显的长期目标之外,还有其他解决方案吗 - 或者只是不建议远程管理 Git 仓库?

答案1

听起来你们确实分享了同样的东西在职的跨多个用户的 repo,这通常不是一个好主意:

  • 你正在开放 repo 控制中的冲突 - 错误很可能表明这种冲突,文件重命名只会掩盖它,但我猜可能会发生变更集丢失甚至严重损坏,特别是当不同的机器使用不同版本的 git 时
  • 你将失去仓库历史中的作者身份

我建议创建一个群组共享裸 git 仓库(专为分享)位于同一分区上,开发人员机器可以以与当前存储库相同的方式访问它(这里有很多信息,你可以从这里开始https://stackoverflow.com/questions/7632454/how-do-you-use-git-bare-init-repository):

  • 开发人员会将这个裸仓库迁移到他们自己的本地git clone仓库git pull在职的他们进行git commit更改并将git push其放回到共享仓库中
  • 另一个 repo 将被 www-data 从 Linux 服务器上的裸 repo 中提取,用于为开发网站提供服务;git pull这个 repo 将使用自上次以来在裸 repo 中推送的所有提交来“刷新”内容git pull(此后可能还需要重新启动 httpd)

答案2

我知道这已经过时了,但我仍然遇到同样的问题。它无法通过 AFP 工作。相反,连接到 SMB 上的共享,它就可以工作了。

相关内容