Jak porównać dwa pliki poza repozytorium za pomocą git

114

Chciałbym porównać dwa pliki css, których nie ma w żadnym repozytorium git. Czy w git jest taka funkcjonalność?

Cedric Reichenbach
źródło
A co jeśli chciałbym użyć, powiedzmy, --patienceflagi? Czy znasz diff (1), który to potrafi?
SamB
Powinieneś zaakceptować odpowiedź Kyle'a Burtona.
BrodieG,

Odpowiedzi:

214

gitdiff jest bardziej funkcjonalny niż standardowy unix diff. Często chcę to zrobić, a ponieważ to pytanie jest wysoko oceniane w Google, chcę, aby ta odpowiedź się pojawiła.

To pytanie: jak używać git diff --color-wordspoza repozytorium Git?

Pokazuje, jak używać git do porównywania plików, w których co najmniej jeden z nich nie znajduje się w repozytorium, używając --no-index:

git diff --no-index file1.txt file2.txt

Nie ma znaczenia, który z nich jest śledzony przez git, a który nie - jeden lub oba mogą zostać prześledzone, np .:

$ date > x
$ sleep 2
$ date > y
$ git diff --color-words --no-index x y
diff --git a/x b/y
index 6b10c7c..70f036c 100644
--- a/x
+++ a/y
@@ -1 + 1 @@
Wed Jun 10 10:57:45|10:57:47 EDT 2013

Koloru nie można tutaj pokazać, więc w przykładzie oddzieliłem zmiany pionową kreską.

Kyle Burton
źródło
14
Jeśli chcesz, aby to zachowanie było domyślne, możesz dodać alias do swojego .bashrcpliku (lub cokolwiek innego):alias diff="git diff --no-index"
przeciwdziałanie
1
Do Twojej wiadomości: W Git dla Windows był błąd (# 2123) polegający na tym, że „--no-index” nie było przestrzegane. Zostało to naprawione w Git dla systemu Windows w wersji 2.21.0 (26 lutego 2019 r.).
StackzOfZtuff
Co oznacza wiersz „index 6b10c7c..70f036c 100644”? Porównuję 2 binaria, różnią się, ale to jedyny wiersz z różnicą ...
Lukas Salich
cześć @LukasSalich wygląda na to, że format linii może być udokumentowany przez git (np .: git-scm.com/docs/diff-format ) plik diff gita nie próbuje porównywać plików binarnych afaik, więc zgaduję, że ta linia oznacza, że ​​się różnią , dwa SHA, na których zidentyfikowano zmianę, a następnie uprawnienia do pliku.
Kyle Burton,
3

diff -u

da podobne, zunifikowane wyjście kontekstowe do diff gita.

James
źródło
1
Nie zapewnia jednak ładnego kolorowania ani korzystania z pagera.
Xiong Chiamiov
Nie pozwala też na ładną różnicę słów ( git diff --word-diff).
Stefan van den Akker
0

Po prostu użyj polecenia diff:

diff file1.ext file2.ext
edwardmp
źródło
2
Hmkay, próbowałem tego, ale moim zdaniem wyjście było po prostu nonsensem ... Może się myliłem ...
Cedric Reichenbach
możesz uruchomić jakieś narzędzie GUI, które zapewni lepszy widok, takie jak gvimdiff, kompare lub podobne
Eugene Sajine