“Git diff” não faz nada

94

Presumo que seja um erro de configuração em algum lugar, mas não consigo descobrir onde. Comandos git regulares parecem funcionar bem, mas "git diff" não faz nada. Por segurança, removi as ferramentas diff externas do meu arquivo .gitconfig. Ele foi instalado via MacPorts e é a versão mais recente (1.7.2.2).

O que vejo é que quando executo "git diff" em minha área de trabalho, ele simplesmente sai, sem fazer nada.

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

Se eu fizer backup de um diretório, fora do meu espaço de trabalho raiz, digitar "git diff" me dará o seguinte:

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

Este pode ser o comportamento esperado, já que não estou em um repositório git.

Alguma ideia sobre o que posso fazer para solucionar isso?

Tom Lianza
fonte
O que o faz pensar que há algo para solucionar? O que você esperava ver?
Rob Kennedy
Observação: a mensagem de erro ao usar git diff fora de um repo logo ficará mais clara. Veja minha resposta abaixo
VonC
Note que se você está tentando comparar um arquivo específico entre dois commits e não vê nenhuma saída, certifique-se de que a caixa está correta no caminho para o arquivo.
Seth Flowers

Respostas:

110

A saída padrão para git diffé a lista de mudanças que não foram confirmadas / adicionadas ao índice. Se não houver alterações, não há saída.

git diff [--opções] [-] [...]

Este formulário é para ver as mudanças que você fez em relação ao índice (área de teste para o próximo commit). Em outras palavras, as diferenças são o que você poderia dizer ao git para adicionar mais ao índice, mas ainda não o fez.

Veja a documentação para mais detalhes. Em particular, role para baixo até os exemplos e leia esta seção:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Compare a cópia de trabalho com o índice
  2. Compare o índice com HEAD
  3. Compare a cópia de trabalho com HEAD

Fora do seu espaço de trabalho, como você adivinhou, o git não saberá o que comparar, então você deve especificar explicitamente dois caminhos para comparar, daí a mensagem de uso.

Douglas
fonte
13
Não tenho certeza se sua resposta está correta, mas me ajudou a encontrar a resposta, então, obrigado e vou marcá-la como tal! A saída padrão para git diff não é a lista de mudanças não confirmadas, é a lista de mudanças não confirmadas que também "ainda não foram testadas para o próximo commit". Então, o comando que faz o que eu esperava que "git diff" fizesse é na verdade "git diff HEAD".
Tom Lianza
2
Para completar a imagem, use git diff --cached para mostrar apenas o que está no índice.
Douglas
o git diff faz: (índice) - (diretório de trabalho) ou o contrário: (diretório de trabalho) - (índice)?
BKSpurgeon
4

Observação: a partir de git 1.8.5 ou 1.9, quarto trimestre de 2013 :

Quando o usuário digita " git diff" fora de uma árvore de trabalho , pensando que está dentro de uma, a mensagem de erro atual é uma linha única:

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

pode não ser suficiente para fazê-lo perceber o erro.

Adicione " Not a git repository" à mensagem de erro quando caímos no --no-indexmodo " " sem uma opção de linha de comando explícita para nos instruir a fazer isso.


Vejo:

Esclareça a documentação para " diff --no-index".
Declare que quando não está dentro de um repositório, --no-indexestá implícito e dois argumentos são obrigatórios.

Esclareça a mensagem de erro de diff-no-indexpara informar ao usuário que o CWD não está dentro de um repositório e, portanto, dois argumentos são obrigatórios.

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

Não faz nada se seu diretório de trabalho estiver limpo e não houver diferenças em relação à última atualização. Tente editar um arquivo e execute git diff novamente, e ele deve mostrar o diff.

Jaanus
fonte
1

Se você o estiver usando fora de um repositório real ou cópia de trabalho, seu comportamento é idêntico ao do GNU diff. Portanto, é necessário informar os 2 diretórios ou arquivos a serem comparados. Exemplo:

git diff old_dir new_dir.

Se houver alguma diferença entre eles, a saída mostrará a você, como esperado.

Jweyrich
fonte
0

Não no seu caso, mas talvez porque o arquivo que você passou não existe

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

nada aconteceu

deFreitas
fonte