Ich habe mir alle ähnlichen Fragen angesehen. Ich habe es jedoch noch einmal überprüft und es passiert definitiv etwas Seltsames.
Auf einem Server (Solaris mit Git 1.8.1) habe ich das Git-Repository geklont und dann den Ordner .git in meine vorhandenen Live-Dateien kopiert. Das hat perfekt funktioniert, ich konnte rennen
git status
dann
git diff [filename]
um alle Dateien zu überprüfen, die anders waren.
Auf einem anderen Server (Solaris mit Git 1.7.6) mache ich jedoch genau das Gleiche
git diff [filename]
zeigt nichts, auch wenn der Inhalt der Datei definitiv anders ist. Ich habe auch getestet, wie ich eine neue Datei hinzufüge, festschreibe und dann bearbeite. Das gleiche Problem git status
zeigt die Datei als geändert, git diff
zeigt aber nichts. Wenn ich die geänderte Datei herunterlade und ein Diff lokal ausführe, erhalte ich eine Diff-Ausgabe.
git diff --cached
.git diff --cached
gibt mir auch nur eine leere Ausgabe.git log
gibt auch keine Ausgabe.core.fileMode
Möglichkeit hier 2) Auch ich bin vor ähnliches Problem mit Console2 config (ich habe es unter git) , wenn Console2 tatsächlich ausgeführt wird . Vielleicht macht eine Art Dateisperre Git zu dem, was die Datei geändert hat.Antworten:
Ich habe die Datei zum Index hinzugefügt :
und lief dann:
Die Beschreibung von git diff finden Sie hier .
Wenn Sie Ihr Git-Add rückgängig machen müssen, lesen Sie bitte hier: Wie mache ich 'Git-Add' vor dem Commit rückgängig?
quelle
Es gibt einige Gründe, warum
git status
sich ein Unterschied zeigt, abergit diff
nicht.Der Modus (Berechtigungsbits) der Datei wurde geändert - beispielsweise von 777 auf 700.
Der Zeilenvorschubstil wurde von CRLF (DOS) in LF (UNIX) geändert.
Der einfachste Weg, um herauszufinden, was passiert ist, besteht darin, auszuführen
git format-patch HEAD^
und zu sehen, was der generierte Patch sagt.quelle
Für mich hatte das etwas mit Dateiberechtigungen zu tun. Jemand mit Mac / Linux in meinem Projekt scheint einige Dateien mit nicht standardmäßigen Berechtigungen festzuschreiben, die mein Windows-Git-Client nicht reproduzieren konnte. Die Lösung für mich bestand darin, git anzuweisen, Dateiberechtigungen zu ignorieren:
Andere Einsicht: Wie kann ich Git dazu bringen, Änderungen im Dateimodus (chmod) zu ignorieren?
quelle
Ich hatte ein Problem, bei dem Hunderte von Zeilenenden von einem Programm geändert und
git diff
alle Quelldateien als geändert aufgelistet wurden. Nach dem Fixieren der Zeilenendengit status
die Dateien weiterhin als geändert aufgelistet.Ich konnte dieses Problem beheben, indem ich alle Dateien zum Index hinzufügte und dann den Index zurücksetzte.
core.filemode
wurde auf false gesetzt.quelle
git add --renormalize .
, siehe meine Antwort unten.Ich vermute, dass entweder mit Ihrer Git-Installation oder Ihrem Repository etwas nicht stimmt.
Versuchen Sie zu laufen:
Sehen Sie, ob Sie etwas Nützliches bekommen. Wenn das nicht hilft, verwenden Sie einfach strace und sehen Sie, was falsch läuft:
quelle
-F
derLESS
env-Variablen das Flag hinzugefügt, das weniger zum Beenden auffordert, wenn weniger als ein Bildschirm mit Informationen angezeigt werden soll. Da Git weniger als Pager verwendet und ich einen kleinen Unterschied hatte, wurde nichts gezeigt. Entweder musste ich-X
derLESS
Umgebung hinzufügen , die den Inhalt auf dem Bildschirm auch nach weniger Exits anzeigt, oder einfach entfernen-F
.GIT_TRACE
zeigte,less
dass ausgeführt wurde, was mich daran erinnerte, dass ich dieLESS
Variable kürzlich geändert habe . Gleicher Grund in @ rcwxoks Antwort, wollte aber einen KommentarGIT_TRACE
dazu abgeben, wie geholfen hat.core.pager
in.gitconfig
, die sich perfekt für mich funktioniert.Ich hatte ein ähnliches Problem:
git diff
würde Unterschiede zeigen, abergit diff <filename>
nicht. Es stellte sich heraus, dass ichLESS
einen String einschließlich-F
(--quit-if-one-screen
) gesetzt habe. Das Entfernen dieses Flags löste das Problem.quelle
-F
,-X
könnte das Hinzufügen auch funktionieren, siehe meine Antwort unten für einen ähnlichen Fall.Wie bereits in einer früheren Antwort erwähnt , kann diese Situation aufgrund von Leitungsendproblemen (CR / LF vs. LF) auftreten. Ich habe dieses Problem (unter Git Version 2.22.0) mit diesem Befehl gelöst:
Nach dem Handbuch:
quelle
Kurze Antwort
Laufen
git add
hilft manchmal.Beispiel
Der Git-Status zeigt geänderte Dateien an und Git Diff zeigt nichts an ...
... Wenn Sie git add ausführen, wird die Inkonsistenz behoben.
quelle
status
unddiff
hat getrennte Möglichkeiten, mit diesen umzugehen.Ich bin auf dieses Problem gestoßen. Mein Fall ähnelte dem
LESS
von rcwxok veröffentlichten Problem .In meinem Fall setze ich die
PAGER
Umgebungsvariable aufPAGER='less -RSF'
.Im Gegensatz zu den vorherigen Antworten wollte ich die
-F
Option jedoch nicht entfernen , da ich sie explizit dort platziert habe, um zu verhindern, dass der Unterschied angezeigt wirdless
Unterschied angezeigt wird, wenn er kürzer als ein Bildschirm ist.Um das gewünschte Ergebnis zu erzielen
-F
, habe ich Folgendes hinzugefügt , anstatt es zu entfernen-X
:PAGER='less -RSFX'
. Dies hat sowohl dasgit diff
Problem gelöst als auch verhindert, dass kurze Unterschiede mit angezeigt werdenless
.quelle
Ich bin gerade in einem ähnlichen Problem gelaufen.
git diff file
zeigte nichts an, weil ich dem Git-Index eine Datei mit einem Teil des Namens in Großbuchstaben hinzugefügt habe:GeoJSONContainer.js
.Danach habe ich es umbenannt
GeoJsonContainer.js
und Änderungen wurden nicht mehr verfolgt.git diff GeoJsonContainer.js
zeigte nichts. Ich musste die Datei mit einem Force-Flag aus dem Index entfernen und die Datei erneut hinzufügen:quelle
Sie haben nicht wirklich eine tatsächliche Frage gestellt, aber da dies ein allgemeiner Anwendungsfall ist, verwende ich ziemlich oft Folgendes. Sie können dies selbst versuchen und prüfen, ob der Fehler weiterhin besteht.
Meine Annahme zu Ihrem Anwendungsfall:
Sie haben ein vorhandenes Verzeichnis mit Dateien und Verzeichnissen und möchten es jetzt in ein Git-Repository konvertieren, das von einem anderen Ort geklont wird ohne Daten in Ihrem aktuellen Verzeichnis ändern.
Es gibt wirklich zwei Möglichkeiten.
Clone repo - mv
.git
- git reset --hardMit dieser Methode haben Sie das vorhandene Repository in ein leeres Verzeichnis geklont und das
.git
Verzeichnis dann in das Zielverzeichnis verschoben . Um ohne Probleme arbeiten zu können, müssen Sie in der Regel ausgeführt werdenDies würde jedoch den Status der Dateien in Ihrem aktuellen Verzeichnis ändern. Sie können dies mit einer vollständigen Kopie / rsync Ihres Verzeichnisses versuchen und untersuchen, welche Änderungen vorgenommen wurden. Zumindest danach sollten Sie keine Diskrepanzen mehr zwischen
git log
und sehenstatus
.Neues Repository initialisieren - auf Ursprung zeigen
Das zweite ist weniger störend:
cd
in Ihr Ziel und starten Sie ein neues Repository mitDann sagst du diesem neuen Repository, dass es einen Vorfahren an einem anderen Ort hat:
Dann sicher
um die Daten zu kopieren, ohne Ihre lokalen Dateien zu ändern. Jetzt sollte alles in Ordnung sein.
Ich empfehle immer den zweiten Weg, um weniger fehleranfällig zu sein.
quelle
.git
Ordnern in andere Arbeitsbereiche möglicherweise die Annahmen von Git verletzt werden. Wenn dies zu unberechenbarem Verhalten führt, können wir Git nicht beschuldigen, wir müssen uns selbst die Schuld geben, Streiche mit Git zu spielen. git bietet Mittel, um das zu beheben, zreset --hard
. Es ist nur so, dass wir das nicht wollen. Dies ist genau der Grund, warum derinit/remote add
Weg empfohlen wird und alles in Ordnung ist.remote add
Art und Weise, Dinge zu tun, kann immer noch auf eine durcheinandergebrachte Situation angewendet werden, wie sie von Oliver PIch bin wieder auf dieses Problem gestoßen. Aber diesmal geschah es aus einem anderen Grund. Ich hatte Dateien in das Repo kopiert, um die vorherigen Versionen zu überschreiben. Jetzt kann ich sehen, dass die Dateien geändert wurden, aber diff gibt die Unterschiede nicht zurück.
Zum Beispiel habe ich eine mainpage.xaml-Datei. Im Datei-Explorer habe ich eine neue mainpage.xaml-Datei über die in meinem aktuellen Repo eingefügt. Ich habe die Arbeit auf einem anderen Computer erledigt und die Datei hier eingefügt.
Die Datei wird geändert angezeigt, aber wenn ich git diff ausführe, werden die Änderungen nicht angezeigt. Dies liegt wahrscheinlich daran, dass sich die Datei in der Datei geändert hat und Git weiß, dass es sich nicht wirklich um dieselbe Datei handelt. Interessant.
Sie können sehen, dass wenn ich diff für die Datei ausführe, nichts angezeigt wird, sondern nur die Eingabeaufforderung zurückgegeben wird.
quelle
Ich hatte das gleiche Problem wie folgt beschrieben: Wenn ich tippte
Git kehrte einfach ohne Fehler zur Eingabeaufforderung zurück.
Wenn ich tippte
Git kehrte einfach ohne Fehler zur Eingabeaufforderung zurück.
Schließlich bemerkte ich beim Herumlesen, dass man
git diff
tatsächlichmingw64\bin\diff.exe
die Arbeit erledigen muss.Das ist der Deal. Ich verwende Windows und habe ein anderes Bash-Dienstprogramm installiert. Es hat meinen Pfad geändert, sodass es nicht mehr auf mein mingw64 \ bin verweist .
Wenn Sie also Folgendes eingeben:
und es kehrt einfach zu der Eingabeaufforderung zurück, bei der Sie möglicherweise dieses Problem haben.
Um dies zu beheben, habe ich meine tatsächlich kopiert
mingw64\bin
Verzeichnis an den Ort an dem Git danach gesucht hat. Ich habe es versucht und es hat immer noch nicht funktioniert.Dann schloss ich mein Git Bash- Fenster und öffnete es erneut. Es ging zu demselben Repository, das fehlgeschlagen war, und jetzt funktioniert es.
quelle