cygwin git status und tortoise git begehen unterschiedliche Änderungen

3174
BetaRide

Auf meiner Win7 Pro 64-Bit-Maschine habe ich TortoiseGit und Cygwin mit Git. Wenn ich versuche, die anstehenden Änderungen herauszufinden, erhalte ich unterschiedliche Ergebnisse von cygwin und TortoiseGit. Ich bin sicher, das Ergebnis von Cygwin ist falsch.

Warum meldet git on cygwin alle diese Dateien als geändert, auch wenn ich sie nicht berührt habe?

Ausgabe von TortoiseGit (korrekt): TortoiseGit Output

Ausgabe von cygwin git (falsch):

$git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: .classpath # modified: .gitignore # modified: belipro.xml # modified: etc/buildnum.properties # modified: etc/db/adjust.sql # modified: etc/db/update11.sql # modified: etc/db/update12.sql # modified: etc/excel-template/Anlagen.xls # modified: etc/projektierbareTemplaes/templateA.rtf # modified: etc/test/belipro.sql.zip # modified: lib/commons-lang-2.6.jar # modified: lib/jacob-1.14.3-x86.dll # modified: lib/jacob.jar # modified: res/ch/pp/belimed/bo/planung/ArbeitsStundenResourcePack.java # modified: res/ch/pp/belimed/bo/planung/AufgabeAuftragResourcePack.java # modified: res/ch/pp/belimed/bo/planung/AufgabeResourcePack.java # modified: res/ch/pp/belimed/bo/planung/arbeitsstunden 32x32.png # modified: res/ch/pp/belimed/bo/planung/arbeitsstunden 64x64.png # modified: res/ch/pp/belimed/bo/planung/aufgabe 32x32.png # modified: res/ch/pp/belimed/bo/planung/aufgabe 64x64.png # modified: res/ch/pp/belimed/bo/planung/aufgabeauftrag 32x32.png # modified: res/ch/pp/belimed/bo/planung/aufgabeauftrag 64x64.png # modified: res/ch/pp/belimed/bo/projekt/DruckbehaelterResourcePack.java # modified: res/ch/pp/belimed/bo/projekt/EldResourcePack.java # modified: res/ch/pp/belimed/bo/projekt/WtdResourcePack.java # modified: res/ch/pp/belimed/bo/projekt/druckbehaelter 32x32.png # modified: res/ch/pp/belimed/bo/projekt/druckbehaelter 64x64.png # modified: res/ch/pp/belimed/bo/projekt/eld 32x32.png # modified: res/ch/pp/belimed/bo/projekt/eld 64x64.png # modified: res/ch/pp/belimed/bo/projekt/projektierbar 32x32.png # modified: res/ch/pp/belimed/bo/projekt/projektierbar 64x64.png # modified: res/ch/pp/belimed/bo/projekt/wtd 32x32.png # modified: res/ch/pp/belimed/bo/projekt/wtd 64x64.png # modified: res/ch/pp/belimed/bo/util/BatchResourcePack.java # modified: res/ch/pp/belimed/bo/util/TypResourcePack.java # modified: res/ch/pp/belimed/explorer/BeliproExplorerComponentFactoryResourcePack.java # modified: res/logging.properties # modified: src/ch/pp/belimed/bo/planung/Aufgabe.java # modified: src/ch/pp/belimed/bo/planung/AufgabeAuftrag.java # modified: src/ch/pp/belimed/bo/planung/Auftrag.java # modified: src/ch/pp/belimed/bo/planung/InternerAuftrag.java # modified: src/ch/pp/belimed/bo/planung/Meilenstein.java # modified: src/ch/pp/belimed/bo/planung/MeilensteinTyp.java # modified: src/ch/pp/belimed/bo/planung/MitarbeiterAuftrag.java # modified: src/ch/pp/belimed/bo/planung/Planung.java # modified: src/ch/pp/belimed/bo/planung/Sammelauftrag.java # modified: src/ch/pp/belimed/bo/projekt/ProjektStatus.java # modified: src/ch/pp/belimed/bo/util/Batch.java # modified: src/ch/pp/belimed/bo/util/Bezeichnung.java # modified: src/ch/pp/belimed/explorer/BeliproExplorerComponentFactory.java # modified: src/ch/pp/belimed/ui/planung/AufgabeSearchPanel.java # modified: src/ch/pp/belimed/ui/planung/InternerAuftragDetailPanel.java # modified: src/ch/pp/belimed/ui/planung/MitarbeiterAuftragDetailPanel.java # modified: src/ch/pp/belimed/ui/planung/MitarbeiterDetailPanel.java # modified: src/ch/pp/belimed/ui/projekt/AnlageSearchPanel.java # modified: src/ch/pp/belimed/ui/projekt/KundeSearchPanel.java # modified: src/ch/pp/belimed/ui/projekt/PlanungAssigner.java # modified: src/ch/pp/belimed/ui/util/BatchDetailPanel.java # modified: src/ch/pp/belimed/util/DbVersion.java # modified: src/ch/pp/belimed/util/ReleaseInfo.java # modified: src/ch/pp/util/DateUtils.java # modified: test/ch/pp/belimed/bo/planung/AufgabeTest.java # no changes added to commit (use "git add" and/or "git commit -a") 
2

3 Antworten auf die Frage

4
RJFalconer

Ich dachte zunächst an Whitespace, aber Sie haben auch ein paar .pngs.

Vielleicht ändert sich der Dateimodus. Versuchen;

git config core.filemode false 

Wenn dies nicht funktioniert und der einzige Unterschied der Änderungszeitstempel ist, können Sie es versuchen;

git config core.trustctime false 

(Natürlich können Sie eine dieser Optionen rückgängig machen, indem Sie den Befehl wiederholen, indem Sie false in true ändern.)

Das Setzen von core.filemode auf false hat für mich funktioniert. Ich hatte Probleme mit cygwin, die fälschlicherweise geänderte Dateien meldeten, die cygwin selbst geklont hat, fwiw. crewbum vor 12 Jahren 2
3
ak2

Ich würde Linienenden vermuten. Wenn Tortoise git wie andere native Windows-Versionskontroll-Clients funktioniert, fügt es den ausgecheckten Dateien automatisch Wagenrücklauf hinzu und kann sie beim Vergleichen mit Dateien im Repository erneut entfernen. Cygwin git, ein guter Unix-Bürger, tut so etwas nicht und sieht daher die von Tortoise hinzugefügten Wagenrückläufe als Modifikationen.

Moral der Geschichte: Halten Sie sich für eine bestimmte Kasse an Tortoise oder Cygwin, sonst erhalten Sie eine schreckliche Mischung aus Linienenden. Ein weiterer Grund, Clients nicht zu mischen, besteht darin, dass sie möglicherweise Unterschiede in der Speicherung von Dingen im .git-Verzeichnis haben.

(Ähnliches gilt für andere Versionskontrollsysteme.)

Ich bin mir ziemlich sicher, dass dies nicht das Problem ist. Wenn dies wahr wäre, würden alle Dateien als geändert markiert werden. Es handelt sich jedoch nur um eine kleine Teilmenge von ~ 2000 Dateien. BetaRide vor 13 Jahren 0
Gut genug, aber es wäre hilfreich gewesen, diese Tatsache in der Frage zu erwähnen. Dies lässt immer noch die Möglichkeit von Inkompatibilitäten im .git-Format zu. Welche Unterschiede hält Cygwin git eigentlich für möglich, dh wie sieht der Output von 'git diff' aus? ak2 vor 13 Jahren 0
@BetaRide: Abhängig von den Zeilenenden, mit denen diese Dateigruppe eingecheckt wurde, und der lokalen Einstellung von autocrlf kann es dennoch möglich sein, dass fehlerhafte Whitespace-Änderungen angezeigt werden, wie in ak2 angegeben. Da Sie jedoch Binärdateien in dieser Mischung haben, ist dies wahrscheinlich nicht das Problem. RJFalconer vor 13 Jahren 0
Dies ist veraltet, siehe http://superuser.com/a/975576/353744 MrTux vor 8 Jahren 0
1
MrTux

TortoiseGit <1.8.13.0 unterstützte Cygwin Git nicht. Sie benötigen eine neuere Version .

1) Wählen Sie den Ordner [CYGWIN-INSTALL-PATH] \ bin-folder als git.exe-Ordner aus.

2) Konfigurieren Sie die Umgebungsvariable HOME in Windows, sodass Cygwin und TortoiseGit dasselbe Basisverzeichnis und dieselbe globale git-config verwenden. Verwenden Sie hier die normale Windows-Notation (z. B. "C: \ Users \ USERNAME"). Standardmäßig verwendet TortoiseGit das Windows-Basisverzeichnis, das sich normalerweise unter c: \ Users befindet, und Cygwin verwendet seine eigenen Basisverzeichnisse, die sich unter [CYGWIN-INSTALL-PATH] \ home befinden.

3) Konfigurieren Sie AutoCrLf. Dies ist erforderlich, da TortoiseGit und Cygwin Git unterschiedliche Standardeinstellungen haben. Der Standard in Cygwin Git ist true.

4) Gehen Sie zu TortoiseGit, dem Abschnitt "Erweiterte Einstellungen", und setzen Sie CygwinHack auf true, um die Cygwin-Problemumgehungen zu aktivieren.

5) Neustart

Basierend auf https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html und https://tortoisegit.org/issue/56

Schritt # 4 ist entscheidend, das hat das Problem für mich behoben (wahrscheinlich, weil ich die anderen Schritte bereits gemacht habe, da ich mich daran erinnerte) Gene Pavlovsky vor 7 Jahren 0