Como posso diferenciar arquivos binários no git?

21

Eu suponho que preciso configurar um difftool. O que difftools funcionam? Como você coloca os parâmetros?

    
por Nick Retallack 23.01.2014 / 21:48

3 respostas

16

Você pode definir uma opção textconv config para um tipo de arquivo. Consulte "Como realizar diffs de texto de arquivos binários" em gitattributes (5) . O que você deve usar depende do tipo de arquivo.

Exemplo 1 :

Digamos que você queira diferenciar o conteúdo dos arquivos zip. Nesse caso, você deve colocar o seguinte em $ GIT_DIR / config file ou $ HOME / .gitconfig.

[diff "zip"]
    textconv = unzip -v

Da próxima vez que você pedir um diff em um arquivo zip em um repositório, ele chamará unzip -v na versão e fará o diff do texto resultante.

Exemplo 2 :

Para arquivos em pdf, você pode usar, por exemplo, pdfinfo ;

[diff "pdf"]
    textconv = pdfinfo

Exemplo 3 :

Se não houver utilidade de informação específica para um tipo de arquivo, você pode, por exemplo use hexdump (vem com o FreeBSD e o OSX, também disponível no Linux):

[diff "bin"]
    textconv = hexdump -v -C
    
por 24.01.2014 / 11:30
6

A resposta de Roland Smith foi útil, mas está incompleta no momento (veja os comentários) - há duas partes para isso.

Você pode definir um novo comando diff no arquivo .git/config do seu repositório ou no seu arquivo global ~/.gitconfig , por exemplo, um comando hex diff usando hexdump :

[diff "hex"]
    textconv = hexdump -v -C
    binary = true

Em seguida, você precisa usar o arquivo .gitattributes do repositório para informar ao git quais arquivos devem ser usados com este comando especial diff:

# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex

Assim como o arquivo .gitignore , o arquivo .gitattributes deve ser verificado em seu repositório.

No meu caso, tenho várias extensões de arquivo diferentes que desejo tratar como binário (por exemplo, evitar conversões de término de linha se usar git no Windows) e também ver diferenças por meio de hexdump :

link

Veja também link para outro exemplo que define um comando hexdump diff para uso com arquivos de imagem.

    
por 18.09.2017 / 13:27
0

Os exemplos acima são maneiras abrangentes de fazer isso. No entanto, se você precisar fazer apenas alguns arquivos, use o seguinte método:

git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file

Aqui estou usando vimdiff , mas você pode usar qualquer outra ferramenta. O acima também pode ser combinado em um pequeno script, se você precisar fazer isso repetidamente.

    
por 19.06.2018 / 18:43

Tags