Eu me pergunto por que o git me diz isso :?
$ git diff MyFile.txt
diff --git a/MyFile.txt b/MyFile.txt
index d41a4f3..15dcfa2 100644
Binary files a/MyFile.txt and b/MyFile.txt differ
Eles não são arquivos de texto?
Eu verifiquei os atributos .gitat e ele está vazio. Por que estou recebendo esta mensagem? Não consigo obter diffs como eu já uso
ADICIONADO:
Eu notei que há @
permissões no arquivo, o que é isso? Poderia ser este o motivo?
$ls -all
drwxr-xr-x 5 nacho4d staff 170 28 Jul 17:07 .
drwxr-xr-x 16 nacho4d staff 544 28 Jul 16:39 ..
-rw-r--r--@ 1 nacho4d staff 6148 28 Jul 16:15 .DS_Store
-rw-r--r--@ 1 nacho4d staff 746 28 Jul 17:07 MyFile.txt
-rw-r--r-- 1 nacho4d staff 22538 5 Apr 16:18 OtherFile.txt
ls
manual no Mac OS X: Se o arquivo ou diretório tiver atributos estendidos, o campo de permissões impresso pela-l
opção será seguido por um@
caractere . Use a opção-@
para ver esses atributos estendidos.vger.kernel.org
listas, você não precisa se inscrever para postar (as pessoas o manterão em CC para obter respostas) e é suposto não dar o volume bastante alto da[email protected]
lista.Respostas:
Significa simplesmente que, quando o git inspeciona o conteúdo real do arquivo (ele não sabe que uma extensão específica não é um arquivo binário - você pode usar o arquivo de atributos, se desejar explicitamente - consulte as páginas de manual).
Depois de inspecionar o conteúdo do arquivo, ele viu coisas que não estão em caracteres ASCII básicos. Sendo UTF16, espero que ele tenha caracteres "engraçados", por isso acha que é binário.
Existem maneiras de dizer ao git se você possui internacionalização (i18n) ou formatos de caracteres estendidos para o arquivo. Eu não estou suficientemente esclarecido sobre o método exato para definir isso - você pode precisar RT [Full] M ;-)
Edit: uma pesquisa rápida de SO encontrado can-i-make-git-reconhece-um-utf-16-arquivo-como-texto que deve lhe dar algumas pistas.
fonte
.gitattributes
)..gitattributes
etc.Se você não definiu o tipo de arquivo, o Git tenta determiná-lo automaticamente e um arquivo com linhas realmente longas e talvez alguns caracteres largos (por exemplo, Unicode) sejam tratados como binários. Com o arquivo .gitattributes, você pode definir como o Git interpreta o arquivo. Definir o atributo diff manualmente permite que o Git interprete o conteúdo do arquivo como texto e fará um diff usual.
Apenas adicione um atributo .gitat à sua pasta raiz do repositório e defina o atributo diff nos caminhos ou arquivos. Aqui está um exemplo:
Se você quiser verificar se há atributos definidos em um arquivo, faça isso com a ajuda do git check-attr
Outra boa referência sobre os atributos do Git pode ser encontrada aqui .
fonte
diff
não étext
. Otext
atributo não diz ao git para diff usando o texto, mas controla como as terminações de linha são tratadas (normalização para LF). Veja seu link para .gitattributes para mais detalhes.diff=xml
vez de apenasdiff
.Eu estava tendo esse problema em que o Git GUI e o SourceTree tratavam os arquivos Java / JS como binários e, portanto, não via diferença.
A criação do arquivo chamado "atributos" na pasta .git \ info com o seguinte conteúdo resolveu o problema
Se você quiser fazer essa alteração em todos os repositórios, poderá adicionar o arquivo de atributos no seguinte local $ HOME / .config / git / attribute
fonte
<project-root>/.gitattributes
arquivo, que ativa a alteração para todos os colaboradores e apenas para o projeto relevante.* diff
foi útil para mim: mostra a diferença em todos os tipos de arquivos. Mas sua solução é melhor, por evitar mostrar diferenças desnecessárias em arquivos binários grandes.O Git até determinará que é binário se você tiver uma linha super longa no seu arquivo de texto. Eu quebrei uma String longa, transformando-a em várias linhas de código-fonte e, de repente, o arquivo passou de 'binário' para um arquivo de texto que eu pude ver (no SmartGit).
Portanto, não continue digitando muito à direita sem pressionar 'Enter' no seu editor - caso contrário, mais tarde, o Git pensará que você criou um arquivo binário.
fonte
Eu tive esse mesmo problema depois de editar um dos meus arquivos em um novo editor. Acontece que o novo editor usou uma codificação diferente (Unicode) do que o meu editor antigo (UTF-8). Então, eu simplesmente disse ao meu novo editor para salvar meus arquivos com UTF-8 e, em seguida, o git mostrou minhas alterações corretamente novamente e não o vi como um arquivo binário.
Eu acho que o problema era simplesmente que o git não sabe como comparar arquivos de diferentes tipos de codificação. Portanto, o tipo de codificação que você usa realmente não importa, desde que permaneça consistente.
Não testei, mas tenho certeza de que, se eu tivesse confirmado meu arquivo com a nova codificação Unicode, na próxima vez em que fizesse alterações, ele mostraria as alterações corretamente e não a detectaria como binária, pois estaria comparando dois arquivos codificados em Unicode, e não um arquivo UTF-8 com um arquivo Unicode.
Você pode usar um aplicativo como o Notepad ++ para ver e alterar facilmente o tipo de codificação de um arquivo de texto; Abra o arquivo no Notepad ++ e use o menu Codificação na barra de ferramentas.
fonte
Eu tive o mesmo problema. Encontrei o tópico ao pesquisar a solução no google, ainda não encontrei nenhuma pista. Mas acho que encontrei o motivo depois de estudar, o exemplo abaixo explicará claramente minha pista.
por enquanto, o arquivo new.txt é considerado como um arquivo de texto.
você obterá esse resultado
e tente isso
você vai ficar abaixo
fonte
Tivemos um caso em que um arquivo .html era visto como binário sempre que tentávamos fazer alterações. Muito uncool para não ver diffs. Para ser sincero, não verifiquei todas as soluções aqui, mas o que funcionou para nós foi o seguinte:
git deletion
. Git dizDeleted file with mode 100644 (Regular) Binary file differs
New file with mode 100644 (Regular) 1 chunk, 135 insertions, 0 deletions
agora o arquivo foi adicionado como um arquivo de texto comumA partir de agora, qualquer alteração feita no arquivo será vista como uma comparação de texto regular. Você também pode esmagar esses commits (1, 2 e 3 sendo a alteração real que você faz), mas eu prefiro poder ver no futuro o que fiz. O esmagamento 1 e 2 mostrará uma alteração binária.
fonte
Por essa resposta útil , você pode perguntar diretamente ao Git por que ele trata um arquivo de uma maneira específica:
Produz resultados úteis como este:
fonte
file
não é um comando git. É uma ferramenta totalmente separada, empacotada com o git no Windows. Existe documentação mostrando que é isso que o git usa para detecção de arquivos binários?Isso também é causado (pelo menos no Windows) por arquivos de texto que possuem UTF-8 com codificação de BOM . Alterar a codificação para UTF-8 normal imediatamente fez o Git ver o arquivo como type = text
fonte
Eu tive uma instância em que
.gitignore
continha uma\r
sequência dupla (retorno de carro) por objetivo.Esse arquivo foi identificado como binário pelo git. Adicionando um
.gitattributes
arquivo ajudou.fonte
Se
git check-attr --all -- src/my_file.txt
indica que seu arquivo está sinalizado como binário e você não o definiu como binário.gitattributes
, verifique-o/.git/info/attributes
.fonte
Mude o Aux.js para outro nome, como Sig.js.
A árvore de origem ainda a mostra como um arquivo binário, mas você pode prepará-lo (adicioná-lo) e confirmar.
fonte
Eu tive um problema semelhante ao colar algum texto de uma mensagem binária do Kafka, que inseria caracteres não visíveis e fazia com que o git pensasse que o arquivo era binário.
Encontrei os caracteres incorretos pesquisando o arquivo usando regex
[^ -~\n\r\t]+
.[
coincidir com caracteres neste conjunto^
corresponde a caracteres que não estão neste conjunto-~
corresponde a todos os caracteres de '' (espaço) a '~'\n
nova linha\r
retorno de carro\t
aba]
fechar conjunto+
corresponde a um ou mais desses caracteresfonte
Passei várias horas examinando tudo nesta lista tentando descobrir por que um dos projetos de teste em minha solução não estava adicionando nenhum teste ao explorador.
No meu caso, aconteceu que, de alguma forma (provavelmente devido a uma má fusão do git em algum lugar), o VS havia perdido completamente uma referência ao projeto. Ainda estava em construção, mas notei que apenas construía as dependências.
Percebi então que ele não estava aparecendo na lista de dependências, então removi e adicionei novamente o projeto de teste e todos os meus testes finalmente apareceram.
fonte