Friday 21 July 2017

Diff Thinks Files Are Binary Options


Nacho4d: That39s estranho, porque git shouldn39t mesmo saber que existem quaisquer 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. 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 man). 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 está errado. Git tinha inspecionado os arquivos reais e já vimos 39 personagens. No entanto, não é quotthinkquot UTF-16 é binário. É 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 Ambos temos razão, mas de perspectivas diferentes. Nós dois dizemos quotGit inspeciona o conteúdo para determinar seu tipo. Ambos 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 What is O oposto de check-attr - há um set-attr Eu originalmente salvo acidentalmente 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 às 16:15 Git vai mesmo determinar que é binário se você tem uma linha super-longa em seu arquivo de texto. Eu quebrei uma Cadeia de caracteres longa, transformando-a em várias linhas de código-fonte, e de repente o arquivo passou de ser binário para um arquivo de texto que eu poderia ver (em SmartGit). Então não continue digitando muito para a direita sem bater Enter em seu editor - caso contrário, mais tarde Git vai pensar que você criou um arquivo binário. Esta é uma informação correta. Eu estava tentando controlar diffs para um extremamente grande Dump MySQL (arquivo. Sql), mas git trata-lo como um arquivo binário, mesmo se ele tem apenas ASCII / UTF8 dados nele. A razão é que as linhas são super-long (inserir valores (um), (dois), (três), (.), (3 milhões.) Estranho, para cada commit, o repositório git não aumenta em 1.7gb , Mas apenas 350 MB Talvez, git está comprimindo o arquivo quotbinaryquot antes de salvá-lo. NDASH Alexandre T. Jan 15 at 17:55 Eu estava tendo esse problema onde Git GUI e SourceTree estava tratando os arquivos Java / JS como binário e, assim, couldnt ver a diferença A criação de atributos de arquivo nomeados na pasta. gitinfo com o seguinte conteúdo resolveu o problema Se você quiser fazer essa alteração para todos os repositórios, então você pode adicionar arquivo de atributos na seguinte localização HOME /.config / git / attributes Eu tive esse mesmo problema após a edição de um Dos meus arquivos em um novo editor. Descreve o novo editor usado 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 o meu Muda corretamente novamente e didnt vê-lo como um arquivo binário. Eu acho que o problema era simplesmente que git doesnt saber 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 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 detectou como binário, uma vez que 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 sei que existe uma postagem semelhante a esta. Aqui . Eu tentei usar o comando comp como mencionado, mas se eu tiver dois arquivos, um com dados como abcd eo outro com dados abcde, ele só diz que os arquivos são de tamanhos diferentes. Eu queria saber onde exatamente eles diferem. No Unix, o diff simples diz-me que linha e coluna, o comando comp em janelas funciona se eu tenho algo como abd e abc. De outra forma. Qualquer idéia que eu posso usar para isso perguntou Jul 29 11 at 18:11 FC funciona muito bem no meu caso, não foi útil como eu queria apenas as linhas que são alteradas. E FC dar dados adicionais como nome do arquivo, as mesmas linhas e comparação bilateral. Mas no meu caso eu queria apenas as linhas que mudaram e queria que essas linhas para ser exportado para arquivo diferente, sem qualquer outro cabeçalho ou dados. Então eu usei findstr para comparar o arquivo: data. txt. bak é o nome do arquivo antigo data. txt é o nome do novo arquivo DiffResult. txt contém os dados que é alterado ou seja, apenas uma linha 09 respondeu 1 Jun 15 às 19: 51 / A apenas primeira linha e última linha de bloco que é alterado / N mostrar números de linha ndash Lukas Dec 2 15 at 10:13 Theres também Powershell (que é parte do Windows). Não é rápido, mas é flexível, heres o comando básico. As pessoas escreveram vários cmdlets e scripts para ele se você precisar de uma melhor formatação. Não faz parte do Windows, mas se você é um desenvolvedor com o Visual Studio, ele vem com WinDiff (gráfico) Mas o meu favorito pessoal é BeyondCompare, que custa 30. A razão pela qual você está recebendo o erro com o COMP é que o utilitário assume os arquivos que você Estão comparando são do mesmo tamanho. Para superar isso você pode usar th / n opção com a qual você pode especificar o número de linhas que você deseja comparar. (Veja as opções suportadas pelo comp, digitando comp / na linha de comando para que seu comando seria semelhante. Isso deve resolver o seu problema se você quiser ficar usando o COMP. Mas isso será um problema para arquivos realmente grandes. Uma opção, mas eu sinto que é primitiva e FC é uma opção melhor. você pode usar FORFILES e FC juntos para provavelmente fazer um utilitário filecompare realmente bom se você precisar de um em uma base freqüente. FC é usado dessa maneira para ref: há Muitas opções disponíveis que você pode ver por fc / espero que isso ajude respondido Jan 30 15 at 6:04 Eu não sei se a seguinte ferramenta é exatly o que você precisa. Mas eu gosto de usar, para arquivos específicos, alguma ferramenta on-line. Eu posso usá-lo independentemente do sistema operacional. Aqui está um exemplo: diffchecker Mas para as minhas necessidades, acho que a melhor ferramenta para controlar as alterações e logs dos meus arquivos de projetos é GIT. Se você trabalha em uma equipe, você pode ter algum repo Online em um servidor do seu, ou usá-lo com Bitbucket ou Github. Espero que ajude alguém. referido Aug 16 15 at 14:54 As janelas equivalente ao comando diff é o comando fc (File Comapre). Aqui estão os passos básicos para fazer isso: 1. Mantenha os dois arquivos em uma pasta (Exemplo file1 e file2) 2. Inicie o prompt de comando 3. Digite fc file1Location file2Location Encontraram um tutorial detalhado sobre o mesmo: respondido August 16 15 at 14 : 41 Sua resposta 2016 Stack Exchange, IncClique em qualquer um dos 687 comandos abaixo para obter uma descrição e uma lista de opções disponíveis. Todos os links nos resumos de comandos apontam para a versão online do livro no Safari Bookshelf. Diff Compare dois arquivos de texto. Diff relata linhas que diferem entre file1 e file2. A saída consiste em linhas de contexto de cada arquivo, com o arquivo1 texto sinalizado por um símbolo lt e o arquivo2 por um símbolo gt. As linhas de contexto são precedidas pelo comando ed (a c ou d) que seria usado para converter file1 para file2. Se um dos arquivos for -. A entrada padrão é lida. Se um dos arquivos for um diretório, diff localiza o nome do arquivo nesse diretório correspondente ao outro argumento (por exemplo, diff mydir junk é o mesmo que diff mydir / junk junk). Se ambos os argumentos são diretórios, o diff relata as linhas que diferem entre todos os pares de arquivos com nomes equivalentes (por exemplo, olddir / programa e newdir / programa). Além disso, diff lista nomes de arquivos exclusivos de um diretório, bem como subdiretórios comuns a ambos. Consulte também cmp. Options Trate todos os arquivos como arquivos de texto. Útil para verificar se os arquivos binários são idênticos. Ignore repetir espaços em branco e espaços em branco de fim de linha tratar espaços em branco sucessivos como um. Ignorar linhas em branco nos arquivos. Contexto diff. Imprima 3 linhas em torno de cada linha mudada. Contexto diff. Imprima n linhas ao redor de cada linha alterada. O contexto padrão é 3 linhas. Para acelerar a comparação, ignorar segmentos de várias mudanças e produzir um conjunto menor de alterações. Ao manusear arquivos C, crie um arquivo de saída que contenha todo o conteúdo de ambos os arquivos de entrada, incluindo as diretivas ifdef e ifndef que refletem as diretivas em ambos os arquivos. Produza um script de comandos (a. c. D) para recriar o arquivo2 a partir do arquivo1 usando o editor ed. Para contexto e dif unificado. Mostra a linha mais recente contendo regexp antes de cada bloco de linhas alteradas. Velocidade de saída de arquivos grandes por varredura para pequenas mudanças espalhadas alongamentos longos com muitas mudanças podem não aparecer. Imprimir mensagem de uso breve. Na tentativa de encontrar uma listagem mais compacta, mantenha n linhas em ambos os lados das linhas alteradas ao realizar a comparação. Ignorar caso na comparação de texto. Maiúsculas e minúsculas são consideradas iguais. Ignore linhas em arquivos que correspondem à expressão regular regexp. Pagine a saída passando-a para pr. Para contexto e dif unificado. Imprimir no lugar do nome do arquivo que está sendo comparado. A primeira opção se aplica ao primeiro nome do arquivo e à segunda opção ao segundo nome do arquivo. Para saída de duas colunas (-y), mostre apenas a coluna esquerda de linhas comuns. Produza saída no formato RCS diff. Trate os arquivos inexistentes como vazios. Ao manusear arquivos em linguagens C ou C-like, como Java, mostre a função que contém cada bloco de linhas alteradas. Assume - c. Mas também pode ser usado com um diff unificado. Se dois diretórios estiverem sendo comparados e o primeiro não tiver um arquivo que esteja no segundo, finja que um arquivo vazio desse nome existe no primeiro diretório. Saída somente se os arquivos diferem. Compare subdiretórios recursivamente. Indique quando os arquivos não são diferentes. Para comparações de diretório, comece com o nome do arquivo. Ignorando arquivos que vêm antes na ordem de lista padrão. Para saída de duas colunas (-y), não mostram linhas comuns. Produza saída com guias expandidas para espaços. Insira as guias iniciais na saída para alinhar as guias corretamente. Dif. Unificada. Imprima versões antigas e novas de linhas em um único bloco, com 3 linhas em torno de cada bloco de linhas alteradas. Dif. Unificada. Imprima versões antigas e novas de linhas em um único bloco, com n linhas ao redor de cada bloco de linhas alteradas. O contexto padrão é 3 linhas. Imprime o número da versão desta versão do diff. Ignorar todos os espaços em branco em arquivos para comparações. Para saída de duas colunas (-y), produza colunas com uma largura máxima de n caracteres. O padrão é 130. Não compare arquivos em um diretório cujos nomes correspondam a regexp. Não compare arquivos em um diretório cujos nomes correspondam a padrões descritos no nome do arquivo. Produza saída de duas colunas. Para contexto e dif unificado. Imprimir n linhas de contexto. O mesmo que especificar um número com - C ou - U .1.7 Arquivos Binários e Forçar Comparações de Texto Se diff achar que um dos dois arquivos que está comparando é binário (um arquivo não-texto), ele normalmente trata esse par de arquivos muito como Se o formato de saída de resumo tivesse sido selecionado (consulte a seção 1.6 Resumindo quais arquivos diferem) 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. 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 milhares. 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 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 - a ou --text. 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 hunks mostrando diferenças entre longas linhas de quaisquer caracteres que os arquivos contenham. Você também pode forçar o diff a considerar todos os arquivos como arquivos binários e relatar somente se eles diferem (mas não como). Use a opção - q ou --brief para isso. Diferentes arquivos binários são considerados causadores de problemas porque a saída de resultado resultante não captura todas as diferenças. Esse problema faz com que diff sai com o status 2. No entanto, esse problema não pode ocorrer com a opção --a ou --text, ou com a opção - q ou --brief, pois essas opções fazem com que diff trate arquivos binários como texto arquivos. 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 o diff a ler e gravar dados binários. 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 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 trocados com sistemas compatíveis com POSIX. O --strip-trailing-cr faz com que diff trate as linhas de entrada que terminam em retorno de carro seguido de nova linha como se terminassem em nova linha simples. Isso pode ser útil ao comparar texto que é imperfeitamente importado de muitos sistemas operacionais de computadores pessoais. Esta opção afeta 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 - l para mostrar os valores de cada byte diferente nos dois arquivos. Com GNU cmp. Você também pode usar a opção - b para mostrar a representação ASCII desses bytes. Consulte a seção 12. Chamando cmp. Para maiores informações. Se diff3 pensar 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 caso contrário 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 options. git-diff - files (1) Manual Page O modo ltmodegt, ltmodegt..ltmodegt linha aparece apenas se pelo menos um dos ltmodegt é diferente do resto. Cabeçalhos estendidos com informações sobre o movimento de conteúdo detectado (renomeações e detecção de cópia) foram projetados para funcionar com diff de dois lttree-ishgt e não são usados ​​pelo formato combinado diff. Ele é seguido por duas linhas do arquivo / para o arquivo de cabeçalho Semelhante ao cabeçalho de duas linhas para o formato de dif unificado tradicional, / dev / null é usado para sinalizar arquivos criados ou excluídos. O formato do cabeçalho Chunk é modificado para evitar que as pessoas o alimentem acidentalmente com o patch - p1. O formato de comparação combinado foi criado para a revisão de alterações de confirmação de mesclagem e não era para ser aplicado. A alteração é semelhante à alteração no cabeçalho de índice estendido: Existem (número de pais 1) caracteres no cabeçalho de bloco para o formato combinado diff. Ao contrário do formato de dif unificado tradicional, que mostra dois arquivos A e B com uma única coluna que tem - (menos 820182128201aparece em A, mas removido em B), (plus820182128201missing em A mas adicionado a B), ou (space820182128201unchanged) prefixo, este formato compara Dois ou mais arquivos file1, file2,8230 com um arquivo X, e mostra como X difere de cada um de fileN. Uma coluna para cada um de fileN é prepended para a linha de saída para observar como linha X8217s é diferente dele. Um caractere na coluna N significa que a linha aparece em fileN mas não aparece no resultado. Um caractere na coluna N significa que a linha aparece no resultado e fileN não tem essa linha (em outras palavras, a linha foi adicionada, do ponto de vista desse pai). Na saída do exemplo acima, a assinatura da função foi alterada de ambos os arquivos (daí duas - remoções de arquivo1 e arquivo2, mais para significar uma linha que foi adicionada não aparece em arquivo1 ou arquivo2). Também outras oito linhas são as mesmas do arquivo1, mas não aparecem no arquivo2 (daqui prefixado com). Quando mostrado por git diff-tree - c. Ele compara os pais de um commit de mesclagem com o resultado de mesclagem (ou seja, file1..fileN são os pais). Quando mostrado por git diff-files - c. Ele compara os dois pais de mesclagem não resolvidos com o arquivo de árvore de trabalho (ou seja, o arquivo 1 é o estágio 2 aka nossa versão, o arquivo2 é o estágio 3, aka sua versão). Outros formatos diff A opção --summary descreve arquivos recém-adicionados, excluídos, renomeados e copiados. A opção --stat adiciona o gráfico diffstat (1) à saída. Essas opções podem ser combinadas com outras opções, como - p. E destinam-se ao consumo humano. Ao mostrar uma alteração que envolve um renomear ou uma cópia, a saída --stat formata os nomes de caminho de forma compacta, combinando prefixo comum e sufixo dos nomes de caminho. Por exemplo, uma alteração que move o arch / i386 / Makefile para arch / x86 / Makefile enquanto modifica 4 linhas será mostrada assim: A opção --numstat fornece as informações diffstat (1), mas foi projetada para um consumo mais fácil da máquina. Uma entrada na saída --numstat tem esta aparência:

No comments:

Post a Comment