Git pensa que eu estou reescrevendo um dos meus arquivos toda vez que eu fazer uma pequena alteração

StackOverflow https://stackoverflow.com/questions/244639

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu tenho um arquivo Java tamanho médio. Toda vez que eu fizer uma alteração em um dos meus arquivos, BuildTable.java, Git reporta-lo como uma grande mudança, mesmo se é apenas uma ou duas linhas. BuildTable.java é de cerca de 200 linhas ea mudança neste cometemos somente mudou uma única linha.

git-diff Ouputs isto:

--- a/src/BuildTable.java
+++ b/src/BuildTable.java
@@ -1 +1 @@
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file

Depois de fazer um git-commit -a

Created commit fe43985: better error notifications
 3 files changed, 54 insertions(+), 50 deletions(-)
 rewrite src/BuildTable.java (78%)

é Git ver este arquivo como binário ou algo assim? Isso é um problema? Se for, como faço para corrigir isso?

Foi útil?

Solução 2

Para corrigir isso, eu não preciso mudar qualquer uma das configurações do git do núcleo, como os fins de linha padrão que está sendo gerado estavam bem, era apenas que este arquivo particular foi mutilado. Para corrigi-lo, abri vim e executado o seguinte comando

:%s/^M/\r/g

Note que digitar o "^ M" você tem que digitar ctrl-V e, em seguida, ctrl-M.

Outras dicas

Claramente, git não gosta de seu final de linha de estilo mac (somente CR). Seu algoritmo diff usa LF como separador de linha.

Corrigir seus arquivos de ter janelas de estilo (CR LF) ou UNIX (apenas LF) terminações de linha.

Set core.autocrlf e core.safecrlf com git-config . Isso fará com que git para automaticamente finais de linha converter ao transferir de / para o armazenamento de objetos. Você pode precisar fazer um commit para armazenar os "novos" terminações.

A julgar pelo seu exemplo colado, você pode estar também sofrendo de "velho estilo Mac finais de linha" (graças a DDAA Charles Bailey pela dica), que são apenas CRs nuas sem qualquer LF, um caso não tratado por git . Se isso for verdade (verifique com um editor hexadecimal), usar uma ferramenta como recode para traduzir este lixo em algum formato século 21, como terminações adequadas linha LF somente Unix.

git diff -b

end ignora as alterações de linha quando mostrando-lhe as diferenças.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top