Friday, 1 February 2019

Diff thinks files are binário opções


1.7 Arquivos binários e forçando comparações de texto Se diff acha que um dos dois arquivos que ele está comparando é binário (um arquivo não-texto), normalmente trata esse par de arquivos muito como se o formato de saída de resumo tivesse sido selecionado (veja Brief) , E relata apenas que os arquivos binários são diferentes. Isso ocorre porque as comparações linha a linha geralmente não são significativas para arquivos binários. Isso não conta como problema, mesmo que a saída resultante não captura todas as diferenças. Diff determina se um arquivo é texto ou binário verificando os primeiros poucos bytes no arquivo o número exato de bytes é dependente do sistema, mas normalmente é vários mil. Se cada byte nessa parte do arquivo não for nulo, diff considera o arquivo como texto, caso contrário considera o arquivo como binário. Às vezes, você pode querer forçar o diff a considerar arquivos como sendo texto. Por exemplo, você pode estar comparando arquivos de texto que contêm caracteres nulos diff seria erroneamente decidir que esses são arquivos não-texto. Ou você pode estar comparando documentos que estão em um formato usado por um sistema de processamento de texto que usa caracteres nulos para indicar a formatação especial. Você pode forçar diff a considerar todos os arquivos como arquivos de texto e compará-los linha a linha, usando a opção --text (-a). Se os arquivos que você compara usando esta opção não contiverem texto, eles provavelmente conterão poucos caracteres de nova linha ea saída diff consistirá de pedaços mostrando diferenças entre as longas linhas de quaisquer caracteres que os arquivos contenham. Você também pode forçar diff a relatar apenas se os arquivos são diferentes (mas não como). Use a opção --brief (-q) para isso. Em sistemas operacionais que distinguem entre texto e arquivos binários, diff normalmente lê e grava todos os dados como texto. Use a opção --binary para forçar diff a ler e gravar dados binários em vez disso. Esta opção não tem efeito em um sistema compatível com POSIX como o GNU ou Unix tradicional. No entanto, muitos sistemas operacionais de computadores pessoais representam o fim de uma linha com um retorno de carro seguido de uma nova linha. Em tais sistemas, diff normalmente ignora esses retornos de carro na entrada e os gera no final de cada linha de saída, mas com a opção bin binária diff trata cada retorno de carro como apenas outro caractere de entrada e não gera um retorno de carro no Final de cada linha de saída. Isso pode ser útil ao lidar com arquivos não-texto que devem ser intercambiados com sistemas compatíveis com POSIX. O --strip-trailing-cr faz com que diff trate linhas de entrada que terminam em retorno de carro seguido de nova linha como se terminassem em linha simples. Isso pode ser útil ao comparar o texto que é imperfeitamente importado de muitos sistemas operacionais de computadores pessoais. Esta opção afeta a forma como as linhas são lidas, o que, por sua vez, afeta como elas são comparadas e produzidas. Se você quiser comparar dois arquivos byte por byte, você pode usar o programa cmp com a opção --verbose (-l) para mostrar os valores de cada byte diferente nos dois arquivos. Com GNU cmp. Você também pode usar a opção - b ou - print-bytes para mostrar a representação ASCII desses bytes. Consulte Invocar cmp. Para maiores informações. Se diff3 pensa que qualquer um dos arquivos que está comparando é binário (um arquivo não-texto), ele normalmente relata um erro, porque essas comparações geralmente não são úteis. Diff3 usa o mesmo teste como diff para decidir se um arquivo é binário. Como com diff. Se os arquivos de entrada contiverem alguns bytes não-texto, mas de outra forma são como arquivos de texto, você pode forçar o diff3 a considerar todos os arquivos como arquivos de texto e compará-los linha a linha usando - a ou --text option. nacho4d: That39s Estranho, porque o git shouldn39t sabe mesmo que há alguns atributos estendidos. Se você pudesse reproduzi-lo, valeria a pena trazer na lista de discussão do git. Como é bom personalizado nas listas vger. kernel. org, você não precisa se inscrever para postar (as pessoas vão mantê-lo CC39ed para respostas) e são tipo de suposto não dado o volume bastante alto da lista gitvger. kernel. org. Ele simplesmente significa que quando git inspeciona o conteúdo real do arquivo (ele não sabe que qualquer extensão não é um arquivo binário - você pode usar o arquivo de atributos se você quiser dizer explicitamente - veja as páginas do manual). Tendo inspecionado o conteúdo dos arquivos, ele viu coisas que não estão em caracteres ASCII básicos. Sendo UTF16 eu espero que ele terá personagens engraçados assim que pensa seu binário. Existem maneiras de dizer ao git se você tem internacionalização (i18n) ou formatos de caracteres estendidos para o arquivo. Im não suficientemente sobre o método exato para a definição que - você pode precisar de RTFullM -) Edit: uma rápida pesquisa de SO encontrado can-i-make-git-reconhecer-a-utf-16-file-as-text que deve Dar-lhe algumas pistas. Você está quase, mas não completamente não errado. Git tinha inspecionado os arquivos reais e já vimos 39 personagens. No entanto, não é quotthinkquot UTF-16 é binário. Ele é binário, porque o texto é definido como ASCII-based (that39s a única coisa que o built-in diff dará resultados utilizáveis ​​para) e UTF-16 não é. Sim, existe uma maneira de dizer ao git para usar o diff especial para arquivos definidos por padrão (usando. gitattributes). Ndash Jan Hudec Jul 28 11 at 9:27 Eu deveria acrescentar, que 39 personagens engraçados39 realmente significa zero bytes. Ndash Jan Hudec Jul 28 11 at 9:31 Nós dois estamos certos, mas de perspectivas diferentes. Nós dois dizemos quotGit inspeciona o conteúdo para determinar seu type. quot Nós dois dizemos que para fazer git saber que deve ser tratado como UTF16 o usuário precisa dizer git via. gitattributes etc ndash Philip Oakley Jul 28 11 at 9:34 O que é O oposto de check-attr - há um set-attr Eu originalmente acidentalmente salvou um arquivo como UTF-16, então comprometido e empurrado, e agora BitBucket vê-lo como UTF-16, mesmo depois de re-salvá-lo como UTF-8 , Comprometendo e empurrando-o novamente. Isso basicamente torna meus pedidos de solicitação impossíveis de ler porque os revisores precisam clicar em cada comentário individual para adicionar comentários de revisão. Ndash John Zabroski Jan 4 16 às 16:15 Eu estava tendo este problema onde Git GUI e SourceTree estava tratando arquivos JavaJS como binário e, portanto, couldnt ver diferença Criando arquivo nomeado atributos em pasta. gitinfo com o seguinte conteúdo resolveu o problema Se você gostaria de Fazer esta alteração para todos os repositórios, então você pode adicionar arquivo de atributos na seguinte localização HOME. configgitattributes 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, git mostrou minhas alterações corretamente novamente e didnt vê-lo 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. Eu não testei, mas tenho certeza se eu teria apenas cometido o meu arquivo com a nova codificação Unicode, da próxima vez que eu fiz alterações nesse arquivo que teria mostrado as alterações corretamente e não detectado como binário, desde então teria Foi comparando dois arquivos codificados Unicode, e não um arquivo UTF-8 para um arquivo Unicode. Você pode usar um aplicativo como o Bloco de Notas para ver e alterar facilmente o tipo de codificação de um arquivo de texto Abra o arquivo no Bloco de Notas e use o menu Codificação na barra de ferramentas. Eu só passei várias horas passando por tudo nesta lista tentando descobrir porque um dos projetos de teste na minha solução não estava adicionando nenhum teste para o explorador. Aconteceu no meu caso que de alguma forma (provavelmente devido a um git pobre fundir em algum lugar) que VS tinha perdido uma referência do projeto completamente. Ainda estava construindo, mas eu notei que ele só construiu as dependências. Então eu notei que ele não estava aparecendo na lista de dependências em si, então eu removi e re-added o projeto de teste e todos os meus testes apareceram finalmente. Respondido Dec 4 14 at 14:51 Visual Studio realmente isn39t relevante aqui. Ndash jpaugh 12/12 às 14:58 Sua resposta 2017 Stack Exchange, Inc13.1 Opções para diff Abaixo está um resumo de todas as opções que a GNU diff aceita. A maioria das opções tem dois nomes equivalentes, um dos quais é uma única letra precedida por lsquo - rsquo, eo outro é um nome longo precedido por lsquo - rsquo. Várias opções de letra única (a menos que tomem um argumento) podem ser combinadas em uma única palavra de linha de comando: - ac é equivalente a - a - c. Long nomeadas opções podem ser abreviadas para qualquer prefixo único de seu nome. Os suportes (e) indicam que uma opção tem um argumento opcional. Trate todos os arquivos como texto e compare-os linha por linha, mesmo se eles não parecem ser texto. Consulte Binário. Ignorar alterações na quantidade de espaço em branco. Veja Espaço em branco. Ignorar alterações que apenas inserir ou excluir linhas em branco. Consulte Linhas em branco. Ler e gravar dados no modo binário. Consulte Binário. Use o formato de saída de contexto, mostrando três linhas de contexto. Consulte o Context Format. Especifique se deseja usar cores para distinguir diferentes contextos, como cabeçalho, linhas adicionadas ou removidas. Quando pode ser omitido, ou um de: nenhum Não use a cor em tudo. Esse é o padrão quando nenhuma opção ndashcolor é especificada. Auto Use a cor somente se a saída padrão for um terminal. Sempre Sempre use cor. Especificando --color e não quando é equivalente a --colorauto. - C lines --context lines Utilize o formato de saída de contexto, mostrando linhas (um inteiro) linhas de contexto, ou três se linhas não são dadas. Consulte o Context Format. Para uma operação adequada, o patch geralmente precisa de pelo menos duas linhas de contexto. Para compatibilidade diff também suporta uma opção obsoleta sintaxe - linhas que tem efeito quando combinado com - c. - p. Ou - u. Os novos scripts devem usar linhas - U (linhas C). Use formato para produzir um grupo de linhas contendo linhas diferentes de ambos os arquivos no formato if-then-else. Consulte Formatos de grupos de linhas. Altere o algoritmo talvez encontrar um conjunto menor de alterações. Isso torna diff mais lento (às vezes muito mais lento). Veja Performance diff. - D name --ifdef name Efetua a saída do formato lsquo ifdef rsquo mesclado, condicional ao nome da macro do pré-processador. Veja If-then-else. Faça a saída que é um script ed válido. Veja scripts ed. Ignorar alterações devido à expansão de tabulação. Veja Espaço em branco. Faça saída que parece vagamente como um script ed, mas tem alterações na ordem em que aparecem no arquivo. Consulte Forward ed. - F regexp --show-function-line regexp Em contexto e formato unificado, para cada pedaço de diferenças, mostre alguma da última linha precedente que corresponde a regexp. Consulte Cabeçalhos especificados. O arquivo de comparação para cada arquivo de operando pode ser um diretório. Exporte um resumo do uso e, em seguida, saia. Não descarte as linhas de última linha do prefixo comum e as linhas de primeira linha do sufixo comum. Veja Performance diff. Ignorar alterações no caso de considerar letras maiúsculas e minúsculas equivalentes. Consulte Dobradura de caixa. - I regexp --ignore-matching-lines regexp Ignora as alterações que apenas inserem ou excluem linhas que correspondem a regexp. Consulte Linhas especificadas. Ignorar caso ao comparar nomes de arquivo. Por exemplo, a comparação recursiva de d para e pode comparar o conteúdo de dInit e einIt. No nível superior, lsquo diff d inIt rsquo pode comparar o conteúdo de dInit e inIt. Consulte Comparação de diretórios. Passe a saída através de pr para paginá-lo. Consulte Paginação. - L rótulo - label rótulo Use o rótulo em vez do nome do arquivo no formato de contexto (consulte Formato de contexto) e formato unificado (consulte Formato unificado) cabeçalhos. Veja RCS. Imprima apenas a coluna esquerda de duas linhas comuns no formato lado a lado. Consulte Formato lado a lado. Use formato para produzir todas as linhas de entrada no formato if-then-else. Consulte Formatos de linha. Saída RCS - formatar diffs como - f, exceto que cada comando especifica o número de linhas afetadas. Veja RCS. Se um arquivo estiver ausente, tratá-lo como presente, mas vazio. Consulte Comparação de diretórios. Use formato para produzir um grupo de linhas tiradas apenas do segundo arquivo no formato if-then-else. Consulte Formatos de grupos de linhas. Use formato para produzir uma linha tirada apenas do segundo arquivo no formato if-then-else. Consulte Formatos de linha. Agir sobre as ligações simbólicas em si, em vez do que eles apontam. Duas ligações simbólicas são consideradas iguais somente quando cada um aponta para exatamente o mesmo nome. Use formato para produzir um grupo de linhas tiradas apenas do primeiro arquivo no formato if-then-else. Consulte Formatos de grupos de linhas. Use formato para produzir uma linha tirada apenas do primeiro arquivo no formato if-then-else. Consulte Formatos de linha. Mostre qual função C cada alteração está dentro. Consulte C Função Títulos. Especifique a paleta de cores a ser usada quando a saída colorida estiver ativada. O padrão é lsquo rs0: hd1: ad32: de31: ln36 rsquo para linhas apagadas vermelhas, linhas adicionadas verde, números de linha ciano, cabeçalho em negrito. Os recursos suportados são os seguintes. SGR para linhas adicionadas. O padrão é o primeiro plano verde. Subcadeia SGR para linhas excluídas. O padrão é o primeiro plano vermelho. Subcadeia SGR para cabeçalho de pedaços. O padrão é negrito em primeiro plano. Subcadeia SGR para números de linha. O padrão é cyan primeiro plano. Informe apenas se os arquivos são diferentes, e não os detalhes das diferenças. Ver Breve. Ao comparar diretórios, comparar recursivamente quaisquer subdiretórios encontrados. Consulte Comparação de diretórios. Informe quando dois arquivos são iguais. Consulte Comparação de diretórios. - S file --starting-file file Ao comparar diretórios, comece com o arquivo de arquivo. Isso é usado para retomar uma comparação interrompida. Consulte Comparação de diretórios. Use heurísticas para acelerar o tratamento de arquivos grandes que têm várias pequenas alterações dispersas. Veja Performance diff. Tira qualquer retorno de carro de arrasto no final de uma linha de entrada. Consulte Binário. Não imprima linhas comuns no formato lado a lado. Consulte Formato lado a lado. Expanda as guias para espaços na saída, para preservar o alinhamento das guias nos arquivos de entrada. Consulte Separadores. Produz um separador em vez de um espaço antes do texto de uma linha no formato normal ou de contexto. Isso faz com que o alinhamento das guias na linha pareça normal. Consulte Separadores. Suponha que as paradas de tabulação sejam definidas em todas as colunas (padrão 8) colunas de impressão. Consulte Separadores. Suprimir quaisquer espaços em branco antes de novas linhas ao imprimir a representação de uma linha vazia, quando saída normal, contexto ou formato unificado. Consulte Espaços em branco. Compare cada operando ao arquivo de arquivo pode ser um diretório. Use o formato de saída unificado, mostrando três linhas de contexto. Consulte Formato unificado. Use formato para produzir um grupo de linhas comuns tiradas de ambos os arquivos no formato if-then-else. Consulte Formatos de grupos de linhas. Use formato para produzir uma linha comum a ambos os arquivos no formato if-then-else. Consulte Formatos de linha. Se um primeiro arquivo estiver ausente, tratá-lo como presente, mas vazio. Consulte Comparação de diretórios. - U linhas - linhas unificadas Utilize o formato de saída unificado, mostrando linhas (um número inteiro) linhas de contexto, ou três se linhas não são dadas. Consulte Formato unificado. Para uma operação adequada, o patch geralmente precisa de pelo menos duas linhas de contexto. Em sistemas mais antigos, diff suporta uma opção obsoleta - linhas que tem efeito quando combinado com - u. POSIX 1003.1-2001 (consulte Conformidade de padrões) não permite este uso - U linhas em vez disso. Saída informações de versão e, em seguida, sair. Ignorar espaço em branco ao comparar linhas. Veja Espaço em branco. - W colunas - colunas de largura Saída na maioria das colunas (padrão 130) imprimir colunas por linha no formato lado a lado. Consulte Formato lado a lado. - x padrão --exclude pattern Ao comparar diretórios, ignorar arquivos e subdiretórios cujos basenames correspondem ao padrão. Consulte Comparação de diretórios. - X file --exclude-from file Ao comparar diretórios, ignorar arquivos e subdiretórios cujos nomes de base correspondem a qualquer padrão contido no arquivo. Consulte Comparação de diretórios. Use o formato de saída lado a lado. Consulte Formato lado a lado. Ignorar espaço em branco na extremidade da linha. Veja Espaço em branco.

No comments:

Post a Comment