„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?

Tom Lianza
źródło
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.

Douglas
źródło
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>
VonC
źródło
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ę.

Jaanus
źródło
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.

jweyrich
źródło
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

deFreitas
źródło