Git致命:无法写入new_index文件

我们是一个正在过渡到Git的networking开发公司。

最终我们打算在本地完全运行它,但目前我们有一个Linux服务器托pipe的开发网站,这也是Git仓库(我通过Tower在我自己的机器上创build的)。

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

我们在这个服务器上的Web开发文件夹是共享和许可的,这样所有的读写操作都是以www-data用户的身份完成的。 不是以任何方式理想,也不是我在生产中做的事情,但它对我们有用。 大多….

每当尝试分阶段修改文件或提交它们时,都会收到以下错误消息:

fatal: unable to write new_index file 

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

我已经发现,以www数据用户的身份login到服务器,cd到项目中的.git文件夹,然后将索引重命名为其他内容并再次返回,通常会修复此问题。 之前和之后的权限(660)是正确的,但重命名技巧似乎工作。

除了在开发者自己的机器上运行Git /网站这个显而易见的长期目标之外,是否有解决scheme – 或者仅仅是不推荐远程pipe理Git仓库?

听起来就像你实际上在多个用户中共享相同的工作回购,这通常不是一个好主意:

  • 你在回购控制的冲突 – 这些错误可以很好地表明这种冲突,文件重命名将简单地掩盖它,但我猜changeset损失,甚至可能发生严重的损坏,尤其是如果不同的机器使用不同版本的git
  • 你在回购历史中失去了作者的身份

我build议创build一个共享的裸git回购 (专为共享而devise)在同一个分区上,开发人员可以通过与当前回购相同的方式访问(大量信息,可以从https: //stackoverflow.com/questions/7632454/how-do-you-use-git-bare-init-repository ):

  • 开发人员将git clone / git pull从这个裸回购到他们自己的本地工作仓库,在那里他们让git commit他们的变化,然后git push他们git push回到共享回购
  • 另一个回购将被Linux服务器上裸露的回购的www数据拉取,用于为开发网站提供服务; 在这个版本中的git pull将会在上次git pull之后在裸回购中推出的所有提交内容“刷新”内容(之后也可能需要重启httpd)