2016-05-05 22 views
1

Ich habe kürzlich meine Programmdateien vom lokalen Speicher in einen Netzwerkspeicher verschoben. Seitdem funktioniert Git nicht mehr richtig.Git wird keine Dateiberechtigungen über cifs zurücksetzen mount

Ein typisches Szenario:
Ich ändere Dateien. Jetzt möchte ich die Änderungen speichern. Ich mache git stash. Git Rollbacks die Änderungen. Die Dateien werden jedoch weiterhin als geändert in git status markiert. git diff -p zeigt

diff --git a/file.txt b/file.txt 
old mode 100644 
new mode 100755 

Ich habe versucht, die Dateien zurückzusetzen, indem

  • git checkout -- file.txt
  • git reset --hard

zu tun, aber nichts funktioniert. Die einzige Möglichkeit, die Arbeitskopie wieder sauber zu bekommen, ist chmod 644 file.txt.


Die Dateien liegen auf einem Synology NAS. Ich werde von cifs auf meinem Linux-Rechner installiert. Ich spielte mit Mount-Optionen noperm, file_mode, dir_mode, aber es kann nicht funktionieren.

Ich lese über aber ich bin mir nicht sicher, ob das hier richtig ist. Ich habe Angst, mein Repository zu beschädigen. Speichert Git Berechtigungen Informationen im Repository/Index? Kann ich das irgendwie überprüfen? Vielleicht habe ich schon etwas falsch gemacht mit meinen aktuellen Commits.

Antwort

0

Sie können Git nicht über Betriebssystemgrenzen und möglicherweise über Samba/CIFS, Punkt verwenden, da es die Dateimaske auf neue und geänderte Dateien zwingt. Siehe this 2013 discussion auf Atlassian Website. Vor einigen Jahren hatte ich gehofft, Windows SourceTree auf einem Git-Repo auf meinem lokalen Dev-Server (Ubuntu-VM-Instanz auf meinem lokalen System) über eine Samba-Map zu verwenden, aber das war nicht so. Ich benutze immer noch die VM für den Dev-Server, da ich es schrecklich frustrierend finde, in Windows mit Umgebungen zu arbeiten, die nicht darauf ausgelegt waren, zu laufen, ganz zu schweigen davon, dass die Produktionsumgebung immer Linux ist. Die Dev-Tools sind natürlich besser unter Windows, also ist dies die "Beste aus beiden Welten" -Lösung für mich (obwohl die Dev-Tools auf Mac-Seite gut sind, wäre OSX auch nicht 1: 1 mit der Linux-Produktionsumgebung) . Also benutze ich eine Samba Map und a good SSH client für alles andere als Git Schreiboperationen und visuelle Git diffs (d. H. Abgleich von Rebase/Zusammenführungskonflikten), die aus dem gegebenen Grund aus Windows nicht ausgeführt werden können. Wenn ein Diff erforderlich ist, wechsle ich zum Linux-GUI-Fenster und führe dort the Linux GUI diff tool of choice aus, und dann werden die Linux-Berechtigungen korrekt gehandhabt. Ansonsten betreibe ich Git in der Kommandozeile mit dem SSH-Client. Sie können beispielsweise nicht einen IDE- oder Windows Git-Client (wie SourceTree) haben, der über Samba/CIFS in den Repo eingreift; Es wird nicht korrekt funktionieren. Für einen visuellen Git-Client ist die neue GitKraken eine ausgezeichnete Wahl (sie läuft unter Linux GUI).

In einige Fällen können Sie das Problem mit Dateiberechtigungen umgehen, indem sie den Git-Befehl ausgeführt wird, während die Dateiberechtigungen ignoriert (dh git -c core.fileMode=false), aber ich habe, dass chaotisch und zu Problemen führen zu finden, so dass ich nur manchmal verwenden Sie es für nicht-Schreib-Operationen, wie git status, und haben ein Git-Alias ​​für diesen Zweck definiert:

nfm = "!f(){ git -c core.fileMode=false [email protected]; };f" 

Dann sind Sie ein Git-Befehl mit Kern laufen kann.filemode vorübergehend deaktiviert, etwa so:

git nfm status 

Added 2016-05-07T01: 39: 44Z:

Auch meine verwandten Beitrag in Superuser sehen.