Rzuciłem okiem na wszystkie podobne pytania. Jednak dwukrotnie sprawdziłem i zdecydowanie dzieje się coś dziwnego.
Na jednym serwerze (Solaris z Git 1.8.1) sklonowałem repozytorium Git, a następnie skopiowałem folder .git do moich istniejących plików live. To działało idealnie, mogłem biegać
git status
następnie
git diff [filename]
aby sprawdzić inne pliki.
Na innym serwerze (Solaris z Git 1.7.6) robię jednak dokładnie to samo
git diff [filename]
nic nie pokazuje, nawet jeśli zawartość pliku jest zdecydowanie inna. Testowałem też dodawanie nowego pliku, zatwierdzanie go, a następnie edycję. Ten sam problem git status
pokazuje plik jako zmieniony, ale git diff
nic nie pokazuje. Jeśli pobieram zmieniony plik i lokalnie uruchamiam diff, otrzymuję dane wyjściowe diff.
git diff --cached
.git diff --cached
po prostu daje mi również pusty wynik.git log
również nie daje wyjścia.core.fileMode
opcji tutaj 2) Również mam podobny problem z konfiguracją Console2 (mam ją pod git), gdy Console2 faktycznie działa. Może coś w rodzaju blokady pliku powoduje, że git się zmienił.Odpowiedzi:
Dodałem plik do indeksu :
a następnie uruchomiłem:
Możesz zobaczyć opis git diff tutaj .
Jeśli chcesz cofnąć dodawanie git, zobacz tutaj: Jak cofnąć „git add” przed zatwierdzeniem?
źródło
Istnieje kilka powodów, dla których
git status
może się to różnić, alegit diff
nie.Zmienił się tryb (bity uprawnień) pliku - na przykład z 777 na 700.
Zmieniono styl wysuwu wiersza z CRLF (DOS) na LF (UNIX)
Najłatwiejszym sposobem sprawdzenia, co się stało, jest uruchomienie
git format-patch HEAD^
i sprawdzenie, co mówi wygenerowana łatka.źródło
Dla mnie miało to coś wspólnego z uprawnieniami do plików. Ktoś z systemem Mac / Linux w moim projekcie wydaje się zatwierdzać niektóre pliki z uprawnieniami innymi niż domyślne, których mój klient git systemu Windows nie mógł odtworzyć. Rozwiązaniem dla mnie było powiedzenie gitowi ignorowania uprawnień do plików:
Inne spostrzeżenia: Jak sprawić, by Git ignorował zmiany trybu plików (chmod)?
źródło
Miałem problem polegający na tym, że setki zakończeń linii zostały zmodyfikowane przez jakiś program i
git diff
wymieniono wszystkie pliki źródłowe jako zmienione. Po naprawieniu zakończeń linii,git status
nadal wyświetlał pliki jako zmodyfikowane.Udało mi się rozwiązać ten problem, dodając wszystkie pliki do indeksu, a następnie resetując indeks.
core.filemode
został ustawiony na false.źródło
git add --renormalize .
, zobacz moją odpowiedź poniżej.Podejrzewam, że coś jest nie tak z instalacją Gita lub repozytorium.
Spróbuj biegać:
Zobacz, czy znajdziesz coś przydatnego. Jeśli to nie pomoże, po prostu użyj strace i zobacz, co się dzieje:
źródło
-F
flagę doLESS
zmiennej env, która mówi less do wyjścia, jeśli jest mniej niż jeden ekran pełen informacji do pokazania. Ponieważ git używa mniej jako pager, a ja miałem mały różnicę, nic nie było pokazywane. Albo musiałem dodać-X
doLESS
env, który wyświetla zawartość na ekranie nawet po mniejszej liczbie wyjść, albo po prostu usunąć-F
.GIT_TRACE
pokazał, żeless
jest wykonywany, co przypomniało mi, żeLESS
ostatnio zmieniłem zmienną. Ten sam powód w odpowiedzi @ rcwxok, ale chciałem skomentować, jakGIT_TRACE
pomogło.core.pager
w.gitconfig
, który działa idealnie dla mnie.Miałem podobny problem:
git diff
pokazywałbym różnice, alegit diff <filename>
nie. Okazało się, że ustawiłemLESS
na ciąg zawierający-F
(--quit-if-one-screen
). Usunięcie tej flagi rozwiązało problem.źródło
-F
, dodawanie-X
może również działać, zobacz moją odpowiedź poniżej na podobny przypadek.Jak już wspomniano w poprzedniej odpowiedzi , sytuacja ta może wynikać z problemów z zakończeniem linii (CR / LF vs. LF). Rozwiązałem ten problem (pod Git w wersji 2.22.0) za pomocą tego polecenia:
Zgodnie z instrukcją:
źródło
Krótka odpowiedź
Bieganie
git add
czasami pomaga.Przykład
Status Git pokazuje zmienione pliki, a git diff nic nie pokazuje ...
... uruchomienie git add rozwiązuje tę niespójność.
źródło
status
idiff
mają różne sposoby radzenia sobie z nimi.Natknąłem się na ten problem. Moja sprawa była podobna do tej
LESS
kwestii pisał przez rcwxok .W moim przypadku ustawiłem
PAGER
zmienną środowiskową naPAGER='less -RSF'
.Jednak w przeciwieństwie do poprzednich odpowiedzi, nie chciałem usuwać tej
-F
opcji, ponieważ wyraźnie ją tam umieściłem, mając nadzieję, że nie pokaże różnicy wless
jeśli jest krótsza niż ekranowa.Aby uzyskać pożądany efekt, zamiast usuwania
-F
, dodałem-X
:PAGER='less -RSFX'
. To zarówno rozwiązałogit diff
problem, jak i dodatkowo zapobiega wyświetlaniu krótkich różnic zless
.źródło
Właśnie uruchomiłem podobny problem.
git diff file
nic nie pokazało, ponieważ dodałem plik do indeksu Gita z częścią jego nazwy wielkimi literami:GeoJSONContainer.js
.Potem zmieniłem nazwę na
GeoJsonContainer.js
i zmiany przestały być śledzone.git diff GeoJsonContainer.js
nic nie pokazywał. Musiałem usunąć plik z indeksu za pomocą flagi siły i dodać plik ponownie:źródło
Tak naprawdę nie zadałeś prawdziwego pytania, ale ponieważ jest to ogólny przypadek użycia, którego używam dość często, oto co robię. Możesz spróbować samemu i sprawdzić, czy błąd nadal występuje.
Moje założenie dotyczące twojego przypadku użycia:
Masz istniejący katalog zawierający pliki i katalogi, a teraz chcesz go przekonwertować na repozytorium Git, które jest sklonowane z innego miejsca bez zmiany jakichkolwiek danych w twoim bieżącym katalogu.
Są naprawdę dwa sposoby.
Clone repo - mv
.git
- git reset --hardTa metoda jest tym, co zrobiłeś - aby sklonować istniejące repozytorium do pustego katalogu, a następnie przenieść
.git
katalog do katalogu docelowego. Aby działać bez problemów, zwykle wymaga to uruchomieniaJednak zmieniłoby to stan plików w bieżącym katalogu. Możesz wypróbować to na pełnej kopii / rsync swojego katalogu i przestudiować, jakie zmiany. Przynajmniej później nie powinieneś już widzieć rozbieżności między
git log
astatus
.Zainicjuj nowe repozytorium - wskaż początek
Drugi jest mniej niepokojący: dotrzyj
cd
do celu i rozpocznij nowe repozytorium zNastępnie mówisz temu nowemu repozytorium, że ma przodka w innym miejscu:
Wtedy bezpiecznie
kopiować dane bez zmiany plików lokalnych. Teraz wszystko powinno być dobrze.
Zawsze zalecam drugi sposób, aby być mniej podatnym na błędy.
źródło
.git
foldery do innych obszarów roboczych, potencjalnie naruszamy założenia git. Jeśli skutkuje to nieobliczalnym zachowaniem, nie możemy winić gita, musimy obwiniać siebie za granie z gitem. git zapewnia środki, aby to naprawić, npreset --hard
. Po prostu nie tego chcemy. To jest dokładnie powód, dla którego tainit/remote add
droga jest zalecana i wszystko jest w porządku.remote add
sposób robienia rzeczy nadal można zastosować doPonownie natknąłem się na ten problem. Ale tym razem stało się to z innego powodu. Skopiowałem pliki do repozytorium, aby nadpisać poprzednie wersje. Teraz widzę, że pliki są zmodyfikowane, ale diff nie zwraca różnic.
Na przykład mam plik mainpage.xaml. W Eksploratorze plików wkleiłem nowy plik mainpage.xaml na ten w moim obecnym repozytorium. Wykonałem pracę na innym komputerze i właśnie wkleiłem plik tutaj.
Plik pokazuje zmodyfikowane, ale kiedy uruchomię git diff, nie pokaże zmian. Dzieje się tak prawdopodobnie dlatego, że informacje o pliku w pliku uległy zmianie i git wie, że tak naprawdę nie jest to ten sam plik. Ciekawy.
Możesz zobaczyć, że kiedy uruchamiam diff na pliku, nic nie pokazuje, po prostu zwraca znak zachęty.
źródło
Miałem ten sam problem opisany w następujący sposób: Jeśli wpisałem
Git po prostu powrócił do monitu bez żadnego błędu.
Jeśli wpisałem
Git po prostu powrócił do monitu bez żadnego błędu.
W końcu, czytając wokół, zauważyłem, że
git diff
faktycznie wywołujemingw64\bin\diff.exe
do wykonania pracy.Oto oferta. Używam systemu Windows i zainstalowałem inne narzędzie Bash i zmieniło moją ścieżkę, więc nie wskazuje już na mój mingw64 \ bin .
Więc jeśli wpiszesz:
i po prostu powraca do monitu, że możesz mieć ten problem.
Wreszcie, aby to naprawić, skopiowałem plik
mingw64\bin
katalog do lokalizacji, w której szukał go Git. Próbowałem i nadal nie działało.Następnie zamknąłem okno Git Bash i otworzyłem je ponownie, przeszedłem do tego samego repozytorium, które ulegało awarii i teraz działa.
źródło