Como comparar dois arquivos que não estão no repo usando git

114

Eu gostaria de comparar dois arquivos css que não estão em nenhum repositório git. Existe tal funcionalidade no git?

Cedric Reichenbach
fonte
E se eu quisesse usar, digamos, a --patiencebandeira? Você conhece um diff (1) que pode fazer isso?
SamB
Você deve aceitar a resposta de Kyle Burton.
BrodieG

Respostas:

214

gitO diff de é mais funcional do que o Unix padrão diff. Costumo fazer isso e, como essa pergunta tem uma classificação elevada no Google, quero que essa resposta apareça.

Esta pergunta: como usar git diff --color-wordsfora de um repositório Git?

Mostra como usar o git para diff arquivos onde pelo menos um deles não está no repositório usando --no-index:

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

Não importa qual é rastreado pelo git e qual não é - um ou ambos podem ser não rastreados, por exemplo:

$ 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

A cor não pode ser mostrada aqui, então separei as alterações com uma barra vertical no exemplo.

Kyle Burton
fonte
14
Se você queria que esse comportamento padrão, você pode adicionar um apelido para o seu .bashrcarquivo (ou o que você usa):alias diff="git diff --no-index"
counterbeing
1
Para sua informação: No Git para Windows, havia um bug (# 2123) que "--no-index" não era respeitado. Isso foi corrigido no Git para Windows v2.21.0 (26 de fevereiro de 2019).
StackzOfZtuff
O que significa a linha "index 6b10c7c..70f036c 100644"? Estou comparando 2 binários, eles diferem, mas essa é a única linha com diferença ...
Lukas Salich
oi @LukasSalich parece que o formato da linha pode ser documentado pelo git (por exemplo: git-scm.com/docs/diff-format ) o diff do git não tenta diferenciar os binários, então estou supondo que essa linha significa que eles diferem , os dois SHAs em que uma alteração foi identificada e as permissões do arquivo.
Kyle Burton
3

diff -u

fornecerá uma saída de contexto unificada semelhante ao diff do git.

James
fonte
1
No entanto, não dá uma boa coloração nem usa pager.
Xiong Chiamiov de
Também não permite uma palavra bonita diff ( git diff --word-diff).
Stefan van den Akker
0

Basta usar o comando diff:

diff file1.ext file2.ext
Edwardmp
fonte
2
Hmkay, eu tentei isso, mas na minha opinião, o resultado foi simplesmente um disparate ... Talvez eu estivesse errado ...
Cedric Reichenbach
você pode executar alguma ferramenta GUI que fornecerá uma melhor visualização, como gvimdiff, kompare ou similar
Eugene Sajine