„Git diff” nic nie robi


96

Przypuszczam, że jest to gdzieś błąd konfiguracji, ale nie mogę dowiedzieć się, gdzie. Wydaje się, że zwykłe polecenia git działają dobrze, ale „git diff” nic nie robi. Aby być bezpiecznym, usunąłem zewnętrzne narzędzia porównujące z mojego pliku .gitconfig. Zostało to zainstalowane przez MacPorts i jest to najnowsza wersja (1.7.2.2).

Widzę, że kiedy uruchamiam „git diff” z mojego obszaru roboczego, po prostu wychodzi i nic nie robi.

$ git --version
git version 1.7.2.2
$ git diff
$ 

Jeśli utworzę kopię zapasową jednego katalogu, poza moim głównym obszarem roboczym, wpisanie „git diff” da mi to:

$ git diff
usage: git diff [--no-index] <path> <path>

Może to być oczekiwane zachowanie, ponieważ nie jestem w repozytorium git.

Jakieś pomysły, co mogę zrobić, aby rozwiązać ten problem?


Dlaczego myślisz, że jest coś do rozwiązania? Czego spodziewałeś się zobaczyć?
Rob Kennedy

Uwaga: komunikat o błędzie podczas korzystania z git diff poza repozytorium wkrótce będzie jaśniejszy. Zobacz moją odpowiedź poniżej
VonC

1
Zauważ, że jeśli próbujesz porównać określony plik między dwoma zatwierdzeniami i nie widzisz wyjścia, upewnij się, że wielkość liter w ścieżce do pliku jest poprawna.
Seth Flowers

Odpowiedzi:


111

Domyślne dane wyjściowe dla git diff jest lista zmian, które nie zostały zatwierdzone / dodane do indeksu. Jeśli nie ma zmian, nie ma wyjścia.

git diff [--options] [-] […]

Ten formularz służy do przeglądania zmian dokonanych w stosunku do indeksu (obszar pomostowy dla następnego zatwierdzenia). Innymi słowy, różnice są co mógłby powiedzieć git kolejny dodatek do indeksu, ale nadal nie ma.

Więcej informacji można znaleźć w dokumentacji . W szczególności przewiń w dół do przykładów i przeczytaj tę sekcję:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Porównaj kopię roboczą z indeksem
  2. Porównaj indeks z HEAD
  3. Porównaj kopię roboczą z HEAD

Poza twoim obszarem roboczym, jak się domyślasz, git nie będzie wiedział, co porównać, więc musisz jawnie określić dwie ścieżki do porównania, stąd komunikat użycia.


13
Nie jestem pewien, czy Twoja odpowiedź jest poprawna, ale pomogła mi znaleźć odpowiedź, więc dziękuję i oznaczę ją jako taką! Domyślnym wyjściem dla git diff nie jest lista niezatwierdzonych zmian, jest to lista niezatwierdzonych zmian, które również „nie są jeszcze przygotowane do następnego zatwierdzenia”. Tak więc polecenie, które robi to, czego się spodziewałem "git diff" to w rzeczywistości "git diff HEAD".
Tom Lianza

2
Aby uzupełnić obraz, użyj git diff --cached, aby pokazać, co jest w indeksie.
Douglas

czy git diff robi: (indeks) - (katalog roboczy) czy na odwrót: (katalog roboczy) - (indeks)?
BKSpurgeon

4

Uwaga: uruchamianie git 1.8.5 lub 1.9, czwarty kwartał 2013 :

Kiedy użytkownik wpisze „ git diffpoza drzewem roboczym , myśląc, że jest w środku, aktualny komunikat o błędzie, który jest jednolinijkowy:

usage: git diff --no-index <path> <path>

może nie wystarczyć, aby uświadomił sobie błąd.

Dodaj „ Not a git repository” do komunikatu o błędzie, gdy wchodzimy w --no-indextryb „ ” bez wyraźnej opcji wiersza poleceń, która nakazuje nam to zrobić.


Widzieć:

Wyjaśnij dokumentację dotyczącą „ diff --no-index”.
Podaj, że gdy nie znajduje się w repozytorium, --no-indexjest domniemana, a dwa argumenty są obowiązkowe.

Wyjaśnij komunikat o błędzie od, diff-no-indexaby poinformować użytkownika, że ​​CWD nie znajduje się w repozytorium, a zatem dwa argumenty są obowiązkowe.

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>

2

Nie robi nic, jeśli twój katalog roboczy jest czysty i nie ma różnic w stosunku do ostatniej aktualizacji. Spróbuj edytować plik, a następnie ponownie uruchom git diff, a następnie powinien pokazać różnicę.


1

Jeśli używasz go poza prawdziwym repozytorium lub kopią roboczą, jego zachowanie jest identyczne jak w przypadku GNU diff. Musisz więc poinformować 2 katalogi lub pliki do porównania. Przykład:

git diff old_dir new_dir.

Jeśli jest między nimi jakaś różnica, dane wyjściowe pokażą, zgodnie z oczekiwaniami.


0

Nie w twoim przypadku, ale może dlatego, że przekazany plik nie istnieje

$ git difftool HEAD HEAD^ -- path/that-not-exists

nic się nie stało

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.