Eu já dei uma olhada em todas as perguntas semelhantes. No entanto, verifiquei novamente e algo estranho está definitivamente acontecendo.
Em um servidor (Solaris com Git 1.8.1), clonei o repositório Git e copiei a pasta .git nos meus arquivos ativos existentes. Isso funcionou perfeitamente, eu poderia correr
git status
então
git diff [filename]
para verificar os arquivos diferentes.
Em outro servidor (Solaris com Git 1.7.6), estou fazendo exatamente o mesmo, no entanto
git diff [filename]
não mostra nada, mesmo que o conteúdo do arquivo seja definitivamente diferente. Também testei a adição de um novo arquivo, o comprometimento e a edição. O mesmo problema, git status
mostra o arquivo como alterado, mas git diff
não mostra nada. Se eu baixar o arquivo alterado e executar um diff localmente, obterei a saída do diff.
git diff --cached
.git diff --cached
apenas me dá saída em branco também.git log
também não dá saída.core.fileMode
opção aqui 2) Além disso, estou enfrentando um problema semelhante com a configuração do Console2 (eu o tenho no git) quando o Console2 está realmente em execução. Talvez um bloqueio de arquivo faça com que o git altere o arquivo.Respostas:
Eu adicionei o arquivo ao índice :
e depois correu:
Você pode ver a descrição do git diff aqui .
Se você precisar desfazer seu git add, veja aqui: Como desfazer o 'git add' antes de confirmar?
fonte
Existem algumas razões pelas quais
git status
pode mostrar uma diferença, masgit diff
talvez não.O modo (bits de permissão) do arquivo foi alterado - por exemplo, de 777 para 700.
O estilo de avanço de linha mudou de CRLF (DOS) para LF (UNIX)
A maneira mais fácil de descobrir o que aconteceu é executar
git format-patch HEAD^
e ver o que o patch gerado diz.fonte
Para mim, tinha algo a ver com permissões de arquivo. Alguém com Mac / Linux no meu projeto parece confirmar alguns arquivos com permissões não padrão que meu cliente git do Windows não conseguiu reproduzir. A solução para mim foi dizer ao git para ignorar as permissões de arquivo:
Outro insight: como faço para o Git ignorar alterações no modo de arquivo (chmod)?
fonte
Eu tive um problema em que centenas de terminações de linha foram modificadas por algum programa e
git diff
listaram todos os arquivos de origem como alterados. Depois de corrigir as terminações de linha,git status
ainda listamos os arquivos como modificados.Consegui corrigir esse problema adicionando todos os arquivos ao índice e redefinindo o índice.
core.filemode
foi definido como falso.fonte
git add --renormalize .
, veja minha resposta abaixo.Eu suspeito que há algo errado com sua instalação do Git ou seu repositório.
Tente executar:
Veja se você obtém algo útil. Se isso não ajudar, basta usar strace e ver o que está errado:
fonte
-F
sinalizador àLESS
variável env que diz menos para sair se houver menos de uma tela cheia de informações para mostrar. Como o git usa menos como pager e eu tive uma pequena diferença, nada estava sendo mostrado. Ou eu tive que adicionar-X
aoLESS
env que mostra o conteúdo na tela, mesmo depois de menos saídas ou apenas remover-F
.GIT_TRACE
mostrou queless
estava sendo executado, o que me lembrou que alterei aLESS
variável recentemente. O mesmo motivo na resposta de @ rcwxok, mas queria comentar sobre comoGIT_TRACE
ajudou.core.pager
no.gitconfig
, que funciona perfeitamente para mim.Eu tive um problema semelhante:
git diff
mostraria diferenças, masgit diff <filename>
não mostraria. Aconteceu que eu definiLESS
uma string incluindo-F
(--quit-if-one-screen
). A remoção desse sinalizador resolveu o problema.fonte
-F
, adicionar-X
também pode funcionar, veja minha resposta abaixo para um caso semelhante.Como já observado em uma resposta anterior , essa situação pode surgir devido a problemas de final de linha (CR / LF vs. LF). Resolvi esse problema (na versão 2.22.0 do Git) com este comando:
De acordo com o manual:
fonte
Resposta curta
Corrida
git add
às vezes ajuda.Exemplo
O status do Git está mostrando os arquivos alterados e o diff do git não está mostrando nada ...
... executar git add resolve a inconsistência.
fonte
status
ediff
tem maneiras separadas de lidar com isso.Eu encontrei este problema. Meu caso foi semelhante ao do
LESS
assunto postado por rcwxok .No meu caso, defino a
PAGER
variável de ambiente comoPAGER='less -RSF'
.No entanto, ao contrário das respostas anteriores, eu não queria remover a
-F
opção, porque eu a coloquei explicitamente na esperança de impedir a exibição do diff emless
se for menor que uma tela.Para obter o resultado desejado, em vez de remover
-F
, acrescentei-X
:PAGER='less -RSFX'
. Isso resolveu ogit diff
problema e, além disso, evita mostrar diferenças curtas comless
.fonte
Acabei de executar em um problema semelhante.
git diff file
não mostrou nada porque eu adicionei o arquivo ao índice Git com uma parte do nome em maiúsculas:GeoJSONContainer.js
.Depois, renomeei o nome para
GeoJsonContainer.js
e as alterações deixaram de ser rastreadas.git diff GeoJsonContainer.js
não estava mostrando nada. Eu tive que remover o arquivo do índice com um sinalizador de força e adicionar o arquivo novamente:fonte
Você realmente não fez uma pergunta real, mas como esse é um caso de uso geral, estou usando com bastante frequência, eis o que faço. Você pode tentar fazer isso sozinho e ver se o erro persiste.
Minha suposição no seu caso de uso:
Você tem um diretório existente contendo arquivos e diretórios e agora deseja convertê-lo em um repositório Git que é clonado de algum outro lugar sem alterar nenhum dado no diretório atual.
Existem realmente duas maneiras.
.git
Repo clone - mv - git reset --hardEste método foi o que você fez - para clonar o repositório existente em um diretório vazio e depois mover o
.git
diretório para o diretório de destino. Para trabalhar sem problemas, isso geralmente exige que você executeNo entanto, isso mudaria o estado dos arquivos no diretório atual. Você pode tentar isso em uma cópia completa / rsync do seu diretório e estudar o que muda. Pelo menos depois, você não deverá mais ver discrepâncias entre
git log
estatus
.Init new repository - apontar para a origem
O segundo é menos perturbador:
cd
para o seu destino e inicie um novo repositório comEntão você diz ao novo repositório que ele tem um ancestral em outro lugar:
Então com segurança
copiar sobre os dados sem alterar seus arquivos locais. Tudo deve estar bem agora.
Eu sempre recomendo a segunda maneira de ser menos propenso a erros.
fonte
.git
pastas para outras áreas de trabalho, estamos potencialmente violando as suposições do git. Se isso resultar em comportamento irregular, não podemos culpar o git, temos que nos culpar por fazer truques com o git. O git fornece meios para corrigir isso, por exemplo, oreset --hard
. Só que não é isso que queremos. Esta é exatamente a razão pela qual oinit/remote add
caminho é recomendado, e tudo está bem.remote add
maneira de fazer as coisas ainda pode ser aplicada a uma situação confusa como a descrita por Oliver PEu me deparei com esse problema novamente. Mas desta vez ocorreu por um motivo diferente. Eu copiei os arquivos no repositório para substituir as versões anteriores. Agora posso ver os arquivos modificados, mas o diff não retorna os diffs.
Por exemplo, eu tenho um arquivo mainpage.xaml. No Explorador de Arquivos, colei um novo arquivo mainpage.xaml no arquivo repo atual. Fiz o trabalho em outra máquina e colei o arquivo aqui.
O arquivo mostra modificado, mas quando executo o git diff, ele não mostra as alterações. Provavelmente porque o arquivo info do arquivo mudou e o git sabe que não é realmente o mesmo arquivo. Interessante.
Você pode ver que, quando executo diff no arquivo, ele não mostra nada, apenas retorna o prompt.
fonte
Eu tive o mesmo problema descrito da seguinte maneira: Se eu digitar
O Git simplesmente retornou ao prompt sem erros.
Se eu digitasse
O Git simplesmente retornou ao prompt sem erros.
Finalmente, lendo ao redor, notei que
git diff
realmente exigemingw64\bin\diff.exe
que o trabalho seja feito.Aqui está o acordo. Estou executando o Windows e havia instalado outro utilitário Bash e ele mudou meu caminho para não apontar mais para o diretório mingw64 \ bin .
Então, se você digitar:
e ele retorna ao prompt que você pode ter esse problema.
Por fim, para corrigir isso, copiei meu
mingw64\bin
diretório para o local em que o Git estava procurando. Tentei e ainda não funcionava.Então, fechei minha janela do Git Bash e a abri novamente, fui para o mesmo repositório que estava falhando e agora funciona.
fonte