fragen stichworte

Git fatal: new_index-Datei kann nicht geschrieben werden

Wir sind ein Webentwicklungsunternehmen, das zu Git wechselt.

Irgendwann beabsichtigen wir, es vollständig lokal auszuführen, aber im Moment haben wir Entwicklungswebsites, die auf einem Linux-Server gehostet werden. Dort befinden sich auch die Git-Repos (die ich über Tower auf meinem eigenen Computer erstelle).

Unsere Entwickler stellen eine Verbindung zu diesem Server entweder über AFP (Mac) oder Samba (Windows/Linux) her und verwenden eine Kombination aus Tower und Sourcetree, um diese Änderungen einzuchecken.

Unser Webentwicklungsordner auf diesem Server ist freigegeben und berechtigt, so dass alle Lese-/Schreibvorgänge als www-data-Benutzer ausgeführt werden. Nicht unbedingt ideal und nichts, was ich in der Produktion tun würde, aber es funktioniert für uns. Meistens ....

Beim Versuch, geänderte Dateien in Szene zu setzen oder zu übergeben, wird diese Fehlermeldung gelegentlich angezeigt:

fatal: unable to write new_index file

Manchmal ist es nur "index" ohne Präfix "new_".

Ich habe festgestellt, dass SSHing an den Server als www-data-Benutzer erfolgt, indem in den .git-Ordner innerhalb des Projekts cd'ing wird und der Index anschließend in etwas anderes umbenannt wird, um dieses Problem zu beheben. Die Berechtigungen (660) für die Datei davor und danach sind korrekt, aber der Umbenennungstrick scheint zu funktionieren.

Abgesehen von dem offensichtlichen langfristigen Ziel, Git/Websites auf den eigenen Maschinen des Entwicklers auszuführen, gibt es eine Lösung dafür - oder ist es einfach nicht empfehlenswert, ein Git-Repo fernzusteuern?

antworten

Klingt so, als würden Sie tatsächlich das gleiche funktionierende Repo für mehrere Benutzer verwenden, was im Allgemeinen keine gute Idee ist:

  • Sie öffnen sich Konflikten in der Repo-Kontrolle - die Fehler könnten sehr gut auf einen solchen Konflikt hinweisen, die Umbenennung der Datei würde ihn lediglich maskieren, aber ich denke, dass ein Änderungssatz oder sogar ernsthafte Verfälschungen auftreten können, insbesondere wenn verschiedene Computer unterschiedliche Versionen von verwenden git
  • Sie verlieren die Identität des Autors in der Repogeschichte

Ich würde vorschlagen, auf derselben Partition ein gruppenteiltes bare git repo (speziell für die Freigabe) zu erstellen, das auf die gleiche Art für Entwickler verfügbar ist Als aktuelles Repo (viele Infos gibt es da draußen, können Sie mit https://stackoverflow.com/questions/7632454/how-do-you-use-git-bare-init-repository) beginnen:

  • Entwickler würden git clone/git pull von diesem reinen Repo zu ihren eigenen lokalen Repos hinzufügen, wo sie git commit ihre Änderungen vornehmen, und dann git push wieder in das gemeinsam genutzte Repo
  • Ein anderes Repo würde von www-data vom Bare-Repo auf dem Linux-Server abgerufen, um die Entwicklungswebsites zu bedienen. Ein git pull in diesem Fall würde den Inhalt mit allen Commits "aktualisieren", die seit dem letzten git pull im reinen Repo gedrückt wurden (ein httpd-Neustart kann auch danach erforderlich sein)