status git cygwin i git commit żółwia pokazują różne zmiany

2

Na mojej 64-bitowej maszynie Win7 Pro mam TortoiseGit i cygwin z git. Jeśli spróbuję znaleźć oczekujące zmiany, otrzymam inne wyniki niż cygwin i TortoiseGit. Jestem pewien, że wynik cygwin git jest zły.

Dlaczego git na cygwin zgłasza wszystkie te pliki jako zmienione, nawet jeśli ich nie dotknąłem?

Dane wyjściowe TortoiseGit (poprawnie): Wyjście TortoiseGit

Wyjście cygwin git (źle):

$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")
BetaRide
źródło

Odpowiedzi:

3

Podejrzewałbym zakończenia linii. Jeśli Tortoise git działa jak inni natywni klienci kontroli wersji systemu Windows, automatycznie dodaje znaki powrotu karetki do pobranych plików i wie, że je usuwa ponownie podczas porównywania z plikami w repozytorium. Cygwin git, będąc dobrym obywatelem Uniksa, nie robi czegoś takiego, więc widzi te zwroty karetki dodane przez Tortoise jako modyfikacje.

Morał tej historii: w przypadku każdej konkretnej kasy trzymaj się albo Tortoise git, albo Cygwin git, w przeciwnym razie skończysz z okropną mieszanką zakończeń linii. Innym powodem nie mieszania klientów jest to, że mogą mieć różnice w sposobie przechowywania rzeczy w katalogu .git.

(Ta sama rada dotyczy innych systemów kontroli wersji).

ak2
źródło
Jestem całkiem pewien, że to nie jest problem. Jeśli tak, to wszystkie pliki zostaną oznaczone jako zmienione. Ale to tylko niewielki podzbiór ~ 2000 plików.
BetaRide
W porządku, ale warto wspomnieć o tym fakcie w pytaniu. Nadal pozostawia to możliwość niezgodności w formacie .git. Jakie różnice według Gyga Cygwina rzeczywiście istnieją, tj. Jak wygląda wyjście git diff?
ak2
@ BetaRide, w zależności od tego, jakie zakończenia linii sprawdzono za pomocą zestawu plików oraz od lokalnego ustawienia autocrlf, nadal może być możliwe wyświetlanie błędnych zmian białych znaków, jak sugeruje ak2. Ponieważ w tym miksie są pliki binarne, prawdopodobnie nie stanowi to problemu.
RJFalconer,
To jest nieaktualne, patrz superuser.com/a/975576/353744
MrTux,
4

Początkowo myślałem o białych znakach, ale masz też trochę plików .png.

Być może zmienia się tryb pliku. Próbować;

git config core.filemode false

Jeśli to nie zadziała, a jedyną różnicą jest znacznik czasu zmiany, możesz spróbować;

git config core.trustctime false

(Oczywiście możesz cofnąć jedną z tych czynności, powtarzając polecenie zmieniając wartość false na true)

RJFalconer
źródło
2
Ustawienie false na core.filemode działało dla mnie. Miałem problemy z nieprawidłowym zgłaszaniem przez CYGWIN zmodyfikowanych plików, które sam klonował CYGWIN, fwiw.
crewbum
1

TortoiseGit <1.8.13.0 nie obsługiwał Cygwin Git. Potrzebujesz nowszej wersji .

1) Wybierz folder [CYGWIN-INSTALL-PATH] \ bin-folder jako folder git.exe.

2) Skonfiguruj zmienną środowiskową HOME w systemie Windows, aby Cygwin i TortoiseGit korzystały z tego samego katalogu domowego i globalnego git-config. Użyj tutaj zwykłej notacji Windows (np. „C: \ Users \ USERNAME”). Domyślnie TortoiseGit używa katalogu domowego Windows, który zwykle znajduje się pod c: \ Users, a Cygwin używa własnych katalogów domowych, które znajdują się w [CYGWIN-INSTALL-PATH] \ home.

3) Skonfiguruj AutoCrLf, jest to konieczne, ponieważ TortoiseGit i Cygwin Git mają różne ustawienia domyślne. Domyślna wartość w Cygwin Git to true.

4) Przejdź do TortoiseGit w sekcji o nazwie „Ustawienia zaawansowane” i ustaw CygwinHack na true, aby aktywować obejścia cygwina.

5) Uruchom ponownie.

Na podstawie https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html i https://tortoisegit.org/issue/56

MrTux
źródło
Krok nr 4 jest kluczowy, to naprawiło dla mnie problem (prawdopodobnie dlatego, że zrobiłem już inne kroki, ponieważ tak to zapamiętałem)
Gene Pavlovsky