Wiederherstellen der Berechtigungen der Dateien und Verzeichnisse in git, wenn Sie geändert wurden?
Habe ich einen git-checkout. Alle Datei-Berechtigungen sind anders als das, was git denkt, Sie sollte deshalb zeigen, wie geändert.
Berühren, ohne den Inhalt der Dateien (die wollen einfach nur, die Berechtigungen zu ändern) wie kann ich alle Berechtigungen von Dateien zu dem, was git denkt, dass Sie sein sollte?
InformationsquelleAutor Dale Forester | 2010-03-25
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Git verfolgt filepermission und macht änderungen an Berechtigungen beim erstellen von patches mit
git diff -p
. Also alles, was wir brauchen, ist:Als ein one-liner:
können Sie auch hinzufügen, Sie als alias für git-config...
...und du kannst es aufrufen über:
Beachten Sie, wenn Sie die shell ist
bash
sicher, dass Sie'
statt"
Zitate rund um die!git
, sonst wird es ersetzt mit dem letztengit
Befehl, den Sie lief.Thx an @Mixologic für den Hinweis dass, indem Sie einfach mit
-R
aufgit diff
das mühsamesed
Befehl ist nicht mehr erforderlich.fatal: unrecognized input
git reset
vor dem Aufruf den Befehl geholfen 🙂fatal: unrecognized input
Nachricht. Stellt sich heraus, meine Farbeinstellungen auf 'immer', was verursacht die Farbe escape-chars werden Teil der Ausgabe auch beim weiterleiten oder in eine Datei schreiben. Wechsel von 'immer' auf 'auto' hat den trick.--no-color
zu dengit diff
Befehl?--color=never
option, dass der trick funktioniert, so... cool! Ich jedenfalls denke, dass 'auto' ist eine bessere option Farbe für grep also werde ich mit dem stick. Danke!--color=never
ist eigentlich die richtige grep-flag, das ist also nicht nur Win/GNU-spezifisch. Super!!!git diff -p
nicht immer melden Sie alle Unstimmigkeitenfatal: unrecognized input
- wenn Sie bereits inszeniert Ihre änderungen vor (Sie sind in der Mitte eines interaktiven rebase für die Instanz bereit, auf weiter) hinzufügen--cached
den git diff Befehlgit checkout <file>
eigentlich wie erwartet funktionieren.--no-ext-diff
wie diese:git diff -p -R --no-color --no-ext-diff \ | grep -E "^(diff|(old|new) mode)" --color=never \ | git apply
git -c core.fileMode=true ...
um sicherzustellen, Sie arbeiten auch in Umgebungen, in denen Globale oder lokale Optionen deaktiviert haben, prüfen Sie die Datei-Modi.fatal: unrecognized input
, die du angewandt hastgit config core.fileMode false
die unten vorgeschlagen. Sollten Siegit config core.fileMode true
vor dem ausführen der obige Befehl!fatal: unrecognized input
können auch aufgrundgit diff
keine Ausgabe keine Ergebnisse für mich war, weil ich versuchte, das Update der vorherigen commit einem anderen Entwickler gemacht. Das fertige Ergebnis für die Befestigung des letzten commit sah, wie dieser auf einem macgit diff -p -R --no-color --no-ext-diff HEAD^ HEAD | grep -E "^(diff|(old|new) mode)" --color=never | git apply
HINWEIS: dieHEAD^ HEAD
war, was mir fehlte.Versuchen
git config core.fileMode false
Hinweis:
core.fileMode
ist groß-und Kleinschreibung!Aus der
git config
Mann Seite:git checkout origin/master
- sets Datei-Berechtigungen an den server übergeben, um meine lokale Arbeitskopie? Denn immer wenn ich build V8 für ArangoDB, die Datei Berechtigungen geändert, so dass der Zugriff verweigert wird, um den gesamten build-Ordner (auch mit erhöhten rechten, Windows 7+, dass ist). Ich brauche, um zu lösen alle lokalen Datei-Berechtigungen, bevor ich weiterhin den build-Prozess. Kanncore.filemode false
das auch fix? Ich vermute, git zu setzen Linux-Berechtigungen auf meinem Windows-Rechner. Die build-Skripte könnte nur erhalten Sie und gelten Sie die gleichen Berechtigungen für neu erstellte Dateien...Git speichert keine Datei Berechtigungen anderes als ausführbare Skripts. Verwenden Sie so etwas wie git-cache-meta zum speichern der Datei die Besitzrechte und Berechtigungen.
Git kann nur speichern zwei Arten von Modi: 755 (ausführbar) und 644 (nicht ausführbare). Wenn Ihre Datei wurde 444 git speichert es hat 644.
umask
sowie eine config-Einstellung finden Sie unter stackoverflow.com/a/12735291/125150.wird in den meisten Fällen funktionieren, aber wenn Sie mit externen diff-Tool wie meld installiert haben, müssen Sie --no-extern-diff
nötig war, in meiner situation
Könnten Sie auch versuchen, eine pre/post-checkout hook könnte den trick tun.
Finden Sie unter: Customizing Git - Git-Hooks
Die einfachste Sache zu tun ist, einfach ändern Sie die Berechtigungen zurück. Wie @kroger festgestellt git nur Spuren executable-bits. So werden Sie wahrscheinlich nur brauchen, um ausführen
chmod -x filename
um es zu beheben (oder+x
wenn es das ist, was benötigt wird.git show
: diff --git a/OpenWatch/src/org/ale/openwatch/fb/FBUtils.java b/OpenWatch/src/org/ale/openwatch/fb/FBUtils.java index cd6fa6a..e5b0935 100644, Die wenig Fett, gibt es die Datei-Berechtigungen.100644
zu100755
. Ich glaube nicht, dass Sie verdienen einen downvote; Git sollte nach unten gestimmt. Es ist so kaputt auf so viele Arten auf so vielen verschiedenen Ebenen...git diff -p
verwendet in muhqu Antwort zeigt möglicherweise nicht alle Abweichungen.core.filemode
istfalse
(das ist der Standard für MSysGit)Dieser code liest die Metadaten direkt statt:
Non-production-grade-one-liner (ersetzt Masken vollständig):
(Credit für "$'\0'" geht http://transnum.blogspot.ru/2008/11/bashs-read-built-in-supports-0-as.html)
Den
etckeeper
- Werkzeug behandeln können Berechtigungen und mit:Können Sie es verwenden, für andere Verzeichnisse als
/etc
.Installieren, indem Sie mit Ihrem Paket-manager oder Quellen aus dem oben genannten link.