Monday 30 October 2017

Gitattributes opções binárias


Se você estiver usando o Git para colaborar com outros no GitHub, verifique se o Git está configurado corretamente para lidar com os endereços de linha. Toda vez que você pressiona o retorno em seu teclado, você realmente está inserindo um caractere invisível chamado final da linha. Historicamente, diferentes sistemas operacionais lidaram com os terminais de linha de forma diferente. Quando você visualiza mudanças em um arquivo, o Git lida com os terminais de linha de sua maneira. Como você está colaborando em projetos com o Git e o GitHub, o Git pode produzir resultados inesperados se, por exemplo, você estiver trabalhando em uma máquina Windows e seu colaborador tiver mudado no OS X. Configurações globais para finais de linha O comando git config core. autocrlf É usado para mudar a forma como o Git lida com os terminais de linha. É preciso um único argumento. No OS X, você simplesmente passa a entrada para a configuração. Por exemplo: no Windows, você simplesmente passa verdadeiro com a configuração. Por exemplo: no Linux, você simplesmente passa a entrada para a configuração. Por exemplo: no OS X e no Linux, você geralmente deseja passar a entrada para esta configuração. No Windows, você geralmente quer usar o verdadeiro. Por exemplo: configurações por repositório Opcionalmente, você pode configurar a maneira como o Git gerencia endereços de linha por uma base de repositório configurando um arquivo. gitattributes especial. Este arquivo está comprometido no repositório e substitui uma configuração core. autocrlf de indivíduos, garantindo um comportamento consistente para todos os usuários, independentemente das configurações Git. A vantagem de um arquivo. gitattributes é que suas configurações de linha estão associadas ao seu repositório. Você não precisa se preocupar se os colaboradores têm ou não a mesma linha que finaliza as configurações que você faz. O arquivo. gitattributes deve ser criado na raiz do repositório e cometido como qualquer outro arquivo. Este é um exemplo do arquivo no GitHub Developers Guide. Um arquivo. gitattributes parece uma tabela com duas colunas: à esquerda é o nome do arquivo para o Git coincidir. À direita está a linha que termina a configuração que o Git deveria usar para esses arquivos. É um exemplo do arquivo. gitattributes. Você pode usá-lo como um modelo para seus repositórios: você notará que os arquivos são correspondentes -.c..sln..png -, separados por um espaço, depois dados uma configuração - texto. Texto eolcrlf. binário. Verifique algumas configurações possíveis abaixo. Textauto Git irá lidar com os arquivos da maneira que julgar melhor. Esta é uma boa opção padrão. Giz de texto sempre irá converter terminais de linha para CRLF no checkout. Você deve usar isso para arquivos que devem manter os fins CRLF, mesmo em OSX ou Linux. Por exemplo, aqui está um projeto do Windows que impõe os fins de linha do CRLF. O eelf Git do texto sempre converterá finais de linha para LF no check-out. Você deve usar isso para arquivos que devem manter terminais LF, mesmo no Windows. Por exemplo, aqui está um projeto que impõe terminações de linha LF. Git binário entenderá que os arquivos especificados não são texto, e não deve tentar alterá-los. A configuração binária também é um alias para - text - diff. Atualizando um repositório depois de alterar os endereços de linha Depois de configurar a opção core. autocrlf e cometer um arquivo. gitattributes, você pode achar que o Git quer confirmar arquivos que você não modificou. Neste ponto, o Git está ansioso para mudar os terminais de linha de cada arquivo para você. A melhor maneira de configurar automaticamente seus terminais de linha do repositorys é primeiro fazer backup de seus arquivos com o Git, excluir todos os arquivos em seu repositório (exceto o diretório. git) e, em seguida, restaurar os arquivos de uma só vez. Salve seus arquivos atuais no Git, para que nenhum de seus trabalhos esteja perdido. Remova todos os arquivos do índice Gits. Reescreva o índice Git para escolher todos os novos terminais de linha. Adicione todos os seus arquivos alterados de volta e prepare-os para um commit. Esta é a sua chance de verificar quais arquivos, se houver, foram inalterados. Confirme as alterações ao seu repositório. Observei os problemas do CRLF após a fusão dos pacotes do meu colega. Às vezes, as linhas com LF foram misturadas nas fontes, provavelmente aquelas que foram incorporadas. Portanto, decidimos adicionar o arquivo. gitattributes com o seguinte conteúdo (comentários removidos): Agora eu observo o comportamento estranho. Posso ver muitos modificados. Arquivos (ou seja, não identificados) que não deveriam estar lá. Eu tentei reiniciar git - difícil. Mas os arquivos ainda têm o mesmo status. Eu tentei clonar o repositório novamente - o mesmo resultado. Tenho git versão 1.7.11.msysgit.0 instalado a partir do Git-1.7.11-preview20170620.exe baixado como versão atual para o Windows. O que mais devo tentar? É a configuração do textauto em. gitattributes que causa esse problema. Você pode removê-lo e viver felizes para sempre, mas você pode ter arquivos com codificações de linha não-repo-default, ou mesmo arquivos com várias codificações de terminação de linha diferentes (ou seja, LF e CRLF e até mesmo CR) em seu repo. Por que isso acontece (Detalhes) Quando o git verifica um arquivo como está, no qual ele irá modificar os fins de linha após o addcommit. O arquivo ainda não foi modificado, mas git já o considera como modificado, porque será. Devido às configurações do repo. De alguma forma, funciona um pouco estranho com o git. Por exemplo, git reset - vezes às vezes funciona e às vezes não, talvez dependendo das suas configurações. Ou, se você entrar em seus. gitattributes e marcar a extensão como binário, o arquivo modificado desaparece magicamente: o efeito permanece mesmo depois de remover a marcação binária, mesmo depois de fazer o git reset - novamente novamente, então pode ser um git Problema de cache ou git caching. Fazendo git - rm no arquivo e depois fazendo o git reset --hard restaura a marcação modificada. Como consertar Nós assumimos aqui que você deseja manter sua configuração do textauto, de modo que o git o avise de terminais de linha inconsistentes em vários arquivos de texto agora e no futuro. Se assim for, escolha o seu método: Opção 0. Anualmente, toca de marcar arquivos como modificados Edite. gitattributes. Comente textauto. Salve o status git (esta etapa é necessária para ter mudanças de registro git em. gitattributes) git reset --hard (isso irá restaurar o textauto e também interferir em qualquer alteração no seu diretório de trabalho, se você tiver feito algum). Isso geralmente funciona (exceto em talvez os casos mais difíceis). Ele também adia o problema, o que provavelmente irá aparecer mais tarde em algum momento, porque os endereços de linha ainda não foram normalizados. Esta opção é ótima quando você tem que rebobinar um commit anterior que não foi normalizado, como durante um rebase, ou algum outro trabalho de git, onde você sabe que os próximos compromissos normalizarão os terminais de linha, mas git reclama sobre arquivos modificados agora impedindo você De continuar. Então, basicamente, use este método quando precisar de git para calar a boca e ignorar arquivos modificados que realmente não foram modificados para seu contexto particular. Opção 1 . Reparo fácil do usuário final Se você tiver apenas alguns arquivos, assegure-se de que seus. gitattributes e core. autocrlf sejam definidos e, em seguida, faça um additmit git e você não deve ver esse problema novamente. Os arquivos serão convertidos para os terminais de linha desejados e armazenados em seu repo, conforme indicado em sua configuração. Este commit será armazenado em seu repo como o arquivo inteiro havia mudado, porque cada linha terá seus finais de linha alterados. Para alguns arquivos em um repo maior ou de código aberto que está bem. Certifique-se de mesclar ou escolher cereais que se comprometam em todos os seus ramos, pois o problema irá existir em todos os ramos que tiveram esses arquivos, até você corrigi-lo. Aliás, é onde você pode usar a Opção 0., exceto se você mudar para um ramo não consolidado, e queixa-se, execute a Opção 0 e faça a correção (mesclagem ou seleção de cereja). IMPORTANTE: se você estiver indo nesta rota da Opção 1, certifique-se de converter os arquivos modificados corretamente. Git pode não estar fazendo isso pra você, assim como você espera, então faça você mesmo antes do seu commit, ou seja, use isso: Convertendo a formatação de nova linha do Mac para o Windows. A razão pela qual o git pode estar confuso é que eu vi arquivos que têm todos os três CR, LF e linha CRLF que finalizam a formatação neles. Nuke aqueles em seu formato preferido antes de se comprometer. Opção 2 . Mecânica avançada git revisão de reescrita da história: Se você tem um repo mais privado e não tem medo de reescrever o histórico, vá ver isso: git vê todo o arquivo como uma linha devido a finais de linha Mac Isso irá reescrever todo o repo e livrar-se de qualquer final de linha Problemas em qualquer lugar em todas as árvores, ramos, para sempre Certifique-se de incluir todas as possíveis extensões de arquivo de texto problemáticas que você pode querer normalizar, ou então elas podem aparecer mais tarde. No meu caso, eu fiz a Opção 2, como eu estava lidando com muitos problemas de finalização de arquivos em vários ramos. Mas então, eu tive algumas extensões inesperadas que eu não normalizei, e simplesmente fiz a Opção 1, já que eu não perdi 5-6 arquivos. Git: lidando com a resolução de linha 8211 solução Se você está desenvolvendo em uma plataforma e não compartilhando seu código , Você não terá um problema com os finais de linha. Mas no projeto desenvolvido multiplataforma você pode ter um problema com terminais de linha diferentes 8211 Windows, Linux e Mac. Como uma solução, a Git tem a opção de tornar consistentes os endereços da linha. Para configurar o seu ambiente, defina primeiro as configurações Git globais: cada repo pode ter um requisito diferente para os terminais de linha, então, para cada repo, você pode especificar os terminais de linha. Na pasta do depósito, execute: Para ser mais consistente e poder especificar o final da linha para diferentes arquivos pela extensão, você pode usar o arquivo. gitattributes. O arquivo está comprometido com o repositório e substituirá a configuração dos desenvolvedores. O arquivo. gitattributes deve ser criado na raiz do repositório e comprometido no repo como qualquer outro arquivo. Após you8217ve configurar a opção core. autocrlf e criar um arquivo. gitattributes, você pode achar que o git quer cometer arquivos que you8217ve não foram modificados. Isso ocorre porque o git quer normalizar os terminais de linha para você. Certifique-se de que você tenha cometido qualquer trabalho antes de fazer isso, ou será perdido. Deixe uma resposta Cancelar resposta Categoriasgitattributes (5) Página Manual Se core. safecrlf estiver definido como verdadeiro ou avisar, o Git verifica se a conversão é reversível para a configuração atual do core. autocrlf. Para verdade, o Git rejeita conversões irreversíveis para aviso, o Git apenas imprime um aviso, mas aceita uma conversão irreversível. A segurança desencadeia para evitar tal conversão feita aos arquivos na árvore de trabalho, mas há algumas exceções. Mesmo que o 828 git adicione-se não toque nos arquivos na árvore de trabalho, o próximo check-out seria, então os gatilhos de segurança git se aplicam para atualizar um arquivo de texto com um patch, tocar os arquivos na árvore de trabalho, mas a operação é sobre arquivos de texto E a conversão do CRLF é sobre como corrigir as inconsistências de fim da linha, de modo que a segurança não desencadeia o próprio dito de git não toca os arquivos na árvore de trabalho, ele geralmente é executado para inspecionar as alterações que você pretende adicionar. Para detectar potenciais problemas com antecedência, os disparadores de segurança. Quando o atributo ident é definido para um caminho, o Git substitui Id no objeto blob por Id:. Seguido do nome do objeto blob hexadecimal de 40 caracteres, seguido de um sinal de dólar no checkout. Qualquer seqüência de bytes que comece com Id: e termina com o arquivo worktree é substituído por Id no check-in. Um atributo de filtro pode ser configurado para um valor de seqüência de caracteres que nomeie um driver de filtro especificado na configuração. Um driver de filtro consiste em um comando limpo e um comando de borrão, um dos quais pode ser deixado sem especificação. Após o checkout, quando o comando smudge é especificado, o comando é alimentado pelo objeto blob a partir de sua entrada padrão, e sua saída padrão é usada para atualizar o arquivo worktree. Da mesma forma, o comando clean é usado para converter o conteúdo do arquivo worktree após o check-in. Um uso da filtragem de conteúdo é massagear o conteúdo em uma forma que seja mais conveniente para a plataforma, o sistema de arquivos e o usuário usar. Para este modo de operação, a frase-chave aqui é mais conveniente e não transforma algo inutilizável em utilizável. Em outras palavras, a intenção é que, se alguém desconhecer a definição do driver de filtro ou não tiver o programa de filtro apropriado, o projeto ainda deve ser utilizado. Outro uso da filtragem de conteúdo é armazenar o conteúdo que não pode ser usado diretamente no repositório (por exemplo, um UUID que se refere ao conteúdo verdadeiro armazenado fora do Git, ou um conteúdo criptografado) e transformá-lo em uma forma utilizável no check-out (por exemplo, download O conteúdo externo, ou descriptografar o conteúdo criptografado). Esses dois filtros se comportam de forma diferente e, por padrão, um filtro é tomado como o primeiro, massageando o conteúdo em uma forma mais conveniente. Uma definição de driver de filtro ausente na configuração, ou um driver de filtro que sai com um status diferente de zero, não é um erro, mas faz com que o filtro seja um passthru não-operacional. Você pode declarar que um filtro transforma um conteúdo que, por si só, é inutilizável em um conteúdo utilizável, definindo a variável de configuração filter. ltdrivergt. required como verdadeira. Por exemplo, em. gitattributes, você atribui o atributo de filtro para caminhos. Então você definiu uma configuração filter. indent. clean e filter. indent. smudge em seu. gitconfig para especificar um par de comandos para modificar o conteúdo dos programas C quando os arquivos de origem são marcados (limpo é executado) e check-out ( Nenhuma alteração é feita porque o comando é gato). Para obter melhores resultados, a limpeza não deve alterar sua saída ainda mais se for executada duas vezes (clean8594clean deve ser equivalente a limpo) e vários comandos de manchas não devem alterar a saída de limpeza (o smudge8594smudge8594clean deve ser equivalente a limpo). Veja a seção sobre a fusão abaixo. O filtro de recuo é bem comportado a este respeito: não irá modificar a entrada que já está corretamente recuada. Neste caso, a falta de um filtro de borrão significa que o filtro limpo deve aceitar sua própria saída sem modificá-la. Se um filtro deve ser bem-sucedido para tornar o conteúdo armazenado, você pode declarar que o filtro é necessário. Na configuração: Sequência f na linha de comando do filtro é substituída pelo nome do arquivo no qual o filtro está funcionando. Um filtro pode usar isso na substituição de palavras-chave. Por exemplo: Observe que f é o nome do caminho em que está sendo trabalhado. Dependendo da versão que está sendo filtrada, o arquivo correspondente no disco pode não existir ou pode ter conteúdos diferentes. Portanto, comandos manchados e limpos não devem tentar acessar o arquivo no disco, mas apenas atuam como filtros no conteúdo fornecido com eles na entrada padrão. Interação entre os atributos checkincheckout No caminho de código check-in, o arquivo worktree é primeiro convertido com driver de filtro (se especificado e driver correspondente definido), então o resultado é processado com ident (se especificado) e, finalmente, com texto (novamente, se Especificado e aplicável). No código de check-out, o conteúdo do blob é primeiro convertido com texto. E então identifique e entregue para filtrar. Fusionando ramos com diferentes atributos checkincheckout Se você adicionou atributos a um arquivo que faz com que o formato do repositório canônico para esse arquivo seja alterado, como adicionar um filtro cleansmudge ou atributos textolident, mesclar qualquer coisa onde o atributo não estiver no lugar normalmente causaria conflitos de mesclagem . Para evitar esses conflitos desnecessários de mesclagem, o Git pode ser informado para executar um check-out virtual e check-in de todos os três estágios de um arquivo ao resolver uma mesclagem de três vias, configurando a variável de configuração fusionar. Isso evita que as alterações causadas pela conversão de check-in causem conflitos de mesclagem espúrios quando um arquivo convertido é mesclado com um arquivo não convertido. Enquanto um smudge8594clean resulta na mesma saída que um limpo mesmo em arquivos que já estão borrados, esta estratégia resolverá automaticamente todos os conflitos relacionados ao filtro. Os filtros que não agem dessa maneira podem causar conflitos de mesclagem adicionais que devem ser resolvidos manualmente. Gerando texto do diff O atributo diff afeta a forma como o Git gera diffs para arquivos específicos. Pode dizer ao Git se deve gerar um patch textual para o caminho ou tratar o caminho como um arquivo binário. Também pode afetar a linha que é mostrada no cabeçalho do pedaço - k, ln, m linha, diga ao Git que use um comando externo para gerar o diff ou peça ao Git que converta arquivos binários para um formato de texto antes de gerar o diff. Um caminho para o qual o atributo diff é definido é tratado como texto, mesmo quando eles contêm valores de bytes que normalmente nunca aparecem em arquivos de texto, como NUL. Um caminho para o qual o atributo diff é desativado irá gerar arquivos binários diferentes (ou um patch binário, se os patches binários estiverem ativados). Um caminho para o qual o atributo diff não é especificado primeiro obtém seu conteúdo inspecionado e, se parecer texto e menor do que core. bigFileThreshold, ele é tratado como texto. Caso contrário, ele geraria arquivos binários diferentes. Diff é mostrado usando o driver de especificação especificado. Cada driver pode especificar uma ou mais opções, conforme descrito na seção a seguir. As opções para o driver do diff foo são definidas pelas variáveis ​​de configuração na seção diff. foo do arquivo de configuração Git. Definindo um driver de disco externo A definição de um driver de diff é feita em gitconfig. Não gitattributes arquivo, tão estritamente falando esta página manual é um lugar errado para falar sobre isso. No entanto8230 Para definir um driver de disco externo jcdiff. Adicione uma seção ao seu arquivo GITDIRconfig (ou arquivo HOME. gitconfig) assim: Quando o Git precisar mostrar uma diferença para o caminho com o atributo diff definido como jcdiff. Ele chama o comando que você especificou com a configuração acima, ou seja, j-c-diff. Com 7 parâmetros, assim como o programa GITEXTERNALDIFF é chamado. Veja git (1) para obter detalhes. Definição de um caudilho-cabeçalho personalizado Cada grupo de mudanças (chamado de pedaço) na saída de diff textual é prefixado com uma linha do formulário: isso é chamado de um cabeçalho de pedaços. A parte TEXTO é, por padrão, uma linha que começa com um alfabeto, um sublinhado ou um sinal de dólar, isso corresponde ao que a saída do diff-p GNU usa. Esta seleção padrão, porém, não é adequada para alguns conteúdos, e você pode usar um padrão personalizado para fazer uma seleção. Primeiro, em. gitattributes, você atribuiria o atributo diff para caminhos. Em seguida, você definiu uma configuração diff. tex. xfuncname para especificar uma expressão regular que corresponda a uma linha que você gostaria de aparecer como o texto do texto hunk. Adicione uma seção ao seu arquivo GITDIRconfig (ou arquivo HOME. gitconfig) assim: Nota. Um nível único de barras invertidas é comido pelo analisador de arquivos de configuração, então você precisaria dobrar as barras invertidas, o padrão acima seleciona uma linha que começa com uma barra invertida e zero ou mais ocorrências de sub seguidas por seção seguida de abraço aberto, fim da linha. Há alguns padrões embutidos para tornar isso mais fácil, e tex é um deles, então você não precisa escrever o acima em seu arquivo de configuração (você ainda precisa habilitar isso com o mecanismo de atributo, por meio de. gitattributes). Os seguintes padrões embutidos estão disponíveis: ada adequado para código-fonte na linguagem Ada. Bibtex adequado para arquivos com referências codificadas BibTeX. Cpp adequado para código fonte nas linguas C e C. Csharp adequado para código fonte na linguagem C. Fortran adequado para o código fonte na linguagem Fortran. Fonte adequada para documentos da Fonte. Html adequado para documentos HTMLXHTML. Java apropriado para código-fonte na linguagem Java. Matlab adequado para código fonte na linguagem MATLAB. Objc adequado para o código fonte na linguagem Objective-C. Pascal adequado para o código fonte na linguagem PascalDelphi. Perl adequado para código fonte na linguagem Perl. Php adequado para o código-fonte na linguagem PHP. Python apropriado para o código fonte na linguagem Python. Ruby adequado para código-fonte na linguagem Ruby. Tex apropriado para código fonte para documentos LaTeX. Customizing word diff Você pode personalizar as regras que git diff --word-diff usa para dividir palavras em uma linha, especificando uma expressão regular apropriada na variável de configuração diff..wordRegex. Por exemplo, no TeX, uma barra invertida seguida de uma seqüência de letras forma um comando, mas vários desses comandos podem ser executados juntos sem espaços interativos. Para separá-los, use uma expressão regular em seu arquivo GITDIRconfig (ou arquivo HOME. gitconfig) como este: um padrão interno é fornecido para todos os idiomas listados na seção anterior. Executando diffs de texto de arquivos binários Às vezes, é desejável ver a diferença de uma versão convertida em texto de alguns arquivos binários. Por exemplo, um documento de processador de texto pode ser convertido em uma representação de texto ASCII e a diferença do texto mostrado. Embora essa conversão perca alguma informação, a diferença resultante é útil para visualização humana (mas não pode ser aplicada diretamente). A opção textconv config é usada para definir um programa para realizar tal conversão. O programa deve ter um único argumento, o nome de um arquivo para converter e produzir o texto resultante no stdout. Por exemplo, para mostrar o diff da informação exif de um arquivo em vez da informação binária (supondo que você tenha a ferramenta exif instalada), adicione a seção a seguir ao seu arquivo GITDIRconfig (ou arquivo HOME. gitconfig): a conversão de texto é geralmente Uma conversão unidirecional neste exemplo, perdemos os conteúdos da imagem real e nos concentramos apenas nos dados de texto. Isso significa que os diffs gerados pelo textconv não são adequados para aplicação. Por esse motivo, apenas o git diff e a família de comandos git log (ou seja, log, whatchanged, show) irão realizar a conversão de texto. O formato-patch git nunca gerará essa saída. Se você quiser enviar a alguém uma variável convertida por texto de um arquivo binário (por exemplo, porque transmite rapidamente as mudanças que você fez), você deve gerá-lo separadamente e enviá-lo como um comentário, além do diferencial binário usual que você pode enviar . Como a conversão de texto pode ser lenta, especialmente quando faz um grande número deles com git log - p. O Git fornece um mecanismo para armazenar em cache a saída e usá-la em futuros diffs. Para habilitar o armazenamento em cache, defina a variável cachetextconv na configuração do seu driver. Por exemplo: isso irá armazenar em cache o resultado de executar o exif em cada blob indefinidamente. Se você alterar a variável de configuração textconv para um driver de diferença, o Git invalidará automaticamente as entradas de cache e re-executará o filtro textconv. Se você deseja invalidar o cache manualmente (por exemplo, porque sua versão do exif foi atualizada e agora produz melhor saída), você pode remover o cache manualmente com git update-ref - d refsnotestextconvjpg (onde jpg é o nome do driver diff, como No exemplo acima). Escolhendo textconv versus diff externo Se você deseja mostrar diferenças entre blobs binárias ou formatadas especialmente no seu repositório, você pode optar por usar um comando diff externo ou usar o textconv para convertê-los em um formato de texto diferente. O método que você escolher depende da sua situação exata. A vantagem de usar um comando diff externo é a flexibilidade. Você não está obrigado a encontrar mudanças orientadas para a linha, nem é necessário que a saída se assemelhe à diferença unificada. Você é livre para localizar e relatar as mudanças da maneira mais apropriada para seu formato de dados. Um textconv, em comparação, é muito mais limitado. Você fornece uma transformação dos dados em um formato de texto orientado por linha, e o Git usa suas ferramentas de diferencial regular para gerar a saída. Existem várias vantagens para escolher este método: Facilidade de uso. Muitas vezes, é muito mais simples escrever uma transformação binária para texto do que fazer sua própria diferença. Em muitos casos, os programas existentes podem ser usados ​​como filtros textconv (por exemplo, exif, odt2txt). Recursos do Git diff. Ao executar apenas a etapa de transformação, você ainda pode utilizar muitos dos recursos do diff do Git8217s, incluindo colorização, difusão de palavras e diffs combinados para fusões. Armazenamento em cache. O cache do Textconv pode acelerar os diffs repetidos, como aqueles que você pode desencadear executando git log - p. Marcando arquivos como o Git binário geralmente adivinha corretamente se um blob contém texto ou dados binários examinando o início do conteúdo. No entanto, às vezes você pode querer substituir sua decisão, seja porque um blob contém dados binários mais tarde no arquivo, ou porque o conteúdo, embora tecnicamente composto de caracteres de texto, é opaco para um leitor humano. Por exemplo, muitos arquivos postscript contêm apenas caracteres ASCII, mas produzem diffs ruidosos e sem sentido. A maneira mais simples de marcar um arquivo como binário é desmarcar o atributo diff no arquivo. gitattributes: Isso fará com que o Git gere arquivos binários diferentes (ou um patch binário, se os patches binários estiverem habilitados) ao invés de um padrão regular. No entanto, pode-se querer especificar outros atributos do driver diff. Por exemplo, você pode querer usar o textconv para converter postscript em uma representação ASCII para visualização humana, mas, de outra forma, tratá-los como arquivos binários. Você não pode especificar ambos os atributos - diff e diffps. A solução é usar a opção de configuração diff..binary: Executando uma mesclagem de três vias. A fusão de atributos afeta o modo como três versões de um arquivo são mescladas quando uma mesclagem no nível do arquivo é necessária durante a fusão git. E outros comandos, como git revert e git cherry-pick. O driver de mesclagem de 3 vias incorporado é usado para mesclar o conteúdo de forma semelhante ao comando de mesclagem do conjunto RCS. Isso é adequado para arquivos de texto comuns. Pegue a versão do ramo atual como o resultado tentativo de mesclagem e declare que a mesclagem tem conflitos. Isso é adequado para arquivos binários que não possuem uma semântica de mesclagem bem definida. Por padrão, isso usa o mesmo driver de mesclagem de 3 vias embutido, como é o caso quando o atributo de mesclagem está configurado. No entanto, a variável de configuração merge. default pode nomear o driver de mesclagem diferente para ser usado com caminhos para os quais o atributo de mesclagem não está especificado. A fusão de 3 vias é realizada usando o driver de mesclagem personalizado especificado. O driver de mesclagem de 3 vias embutido pode ser explicitamente especificado pedindo driver de texto, o driver incorporado pode ser solicitado com o binário. Drivers de mesclagem integrados Existem alguns drivers de mesclagem embutidos de baixo nível definidos que podem ser solicitados através do atributo de mesclagem. Fundamentação normal de nível de arquivo de 3 vias para arquivos de texto. As regiões em conflito são marcadas com marcadores de conflitos. Ltltltltltltlt. E gtgtgtgtgtgtgt. A versão do seu ramo aparece antes do marcador e a versão do ramo mesclado aparece após o marcador. Mantenha a versão do seu ramo na árvore de trabalho, mas deixe o caminho no estado em conflito para o usuário resolver. Execute a mesclagem de nível de arquivo de 3 vias para arquivos de texto, mas tire linhas de ambas as versões, em vez de deixar marcadores de conflito. Isso tende a deixar as linhas adicionadas no arquivo resultante em ordem aleatória e o usuário deve verificar o resultado. Não use isso se você não entender as implicações. Definindo um driver de mesclagem personalizado A definição de um driver de mesclagem é feita no arquivo. gitconfig, não no arquivo de gitattributes, então, falando estritamente, esta página de manual é um lugar errado para falar sobre isso. No entanto, para definir um driver de mesclagem personalizado filfre. Adicione uma seção ao seu arquivo GITDIRconfig (ou arquivo HOME. gitconfig) assim: a variável fundir ... nome dá ao driver um nome legível para humanos. O valor 8216merge..driver variable8217s é usado para construir um comando para executar para mesclar a versão ancestor8217s (O), a versão atual (A) e a outra versão de ramos8217 (B). Esses três tokens são substituídos pelos nomes de arquivos temporários que mantêm o conteúdo dessas versões quando a linha de comando é construída. Além disso, L será substituído pelo tamanho do marcador de conflito (veja abaixo). Espera-se que o driver de mesclagem deixe o resultado da mesclagem no arquivo chamado com A, substituindo-o e saia com status zero se ele conseguisse mesclar-los de forma limpa ou não-zero se houvesse conflitos. A variável cruzada fusão ... especifica o outro driver de mesclagem a ser usado quando o driver de mesclagem é chamado para uma mesclagem interna entre antepassados ​​comuns, quando há mais de um. Quando não especificada, o próprio driver é usado tanto para a mesclagem interna como para a mesclagem final. O driver de mesclagem pode aprender o caminho em que o resultado resultante será armazenado através do espaço reservado P. Tamanho do marcador de conflito Este atributo controla o comprimento dos marcadores de conflito deixados no arquivo da árvore de trabalho durante uma mesclagem em conflito. Somente o ajuste para o valor para um inteiro positivo tem algum efeito significativo. Por exemplo, esta linha em. gitattributes pode ser usada para indicar que a máquina de mesclagem deixa marcadores de conflito muito mais longos (ao invés dos marcadores de conflito habituais de 7 caracteres) ao mesclar o arquivo Documentationgit-merge. txt resulta em um conflito. Verificando espaços em branco de espaços em branco A variável de configuração core. whitespace permite que você defina o que diff e apply deve considerar erros de espaço em branco para todos os caminhos do projeto (veja git-config (1)). Este atributo oferece um controle mais preciso por caminho. Observe todos os tipos de possíveis erros de espaço em branco conhecidos por Git. A largura da guia é tirada do valor da variável de configuração core. whitespace. Não note nada como erro. Use o valor da variável de configuração core. whitespace para decidir o que aviso como erro. Especifique uma lista separada de vírgulas de problemas de espaços em branco comuns para se notar no mesmo formato que a variável de configuração core. whitespace. Criando uma exportação de arquivos - ignore Arquivos e diretórios com o atributo export-ignore won8217t seja adicionado aos arquivos de arquivo. Export-subst Se o atributo export-subst estiver configurado para um arquivo, o Git expandirá vários espaços reservados ao adicionar este arquivo a um arquivo. A expansão depende da disponibilidade de um ID de confirmação, ou seja, se git-archive (1) tiver recebido uma árvore em vez de uma confirmação ou uma etiqueta, então nenhuma substituição será feita. Os espaços reservados são os mesmos para a opção --prettyformat: de git-log (1). Exceto que eles precisam ser embalados assim: Formato: PLACEHOLDERS no arquivo. Por exemplo. O formato da cordão: H será substituído pelo hash de confirmação. Embalagem de objetos A compactação Delta não será tentada para blobs para caminhos com o atributo delta configurado como falso. Visualizando arquivos em ferramentas GUI O valor desse atributo especifica a codificação de caracteres que deve ser usada pelas ferramentas GUI (por exemplo, gitk (1) e git-gui (1)) para exibir o conteúdo do arquivo relevante. Observe que, devido a considerações de desempenho, o gitk (1) não usa esse atributo, a menos que você habilite manualmente as codificações por arquivo em suas opções. Se este atributo não estiver definido ou tiver um valor inválido, o valor da variável de configuração gui. encoding será usado em vez disso (veja git-config (1)). USANDO ATRIBUTOS MACRO Você não deseja nenhuma conversão de fim de linha aplicada, nem nenhum arquivo textual produzido para qualquer arquivo binário que você rastreie. Você precisaria especificar, por exemplo, Mas isso pode tornar-se complicado, quando você tem muitos atributos. Usando atributos de macro, você pode definir um atributo que, quando definido, também define ou desactiva vários outros atributos ao mesmo tempo. O sistema conhece um atributo de macro interno, binário: a configuração do atributo binário também não configura os atributos de texto e dif como acima. Observe que os atributos de macro só podem ser definidos, embora a configuração um possa ter o efeito de definir ou desarmar outros atributos ou até mesmo retornar outros atributos para o estado não especificado. DEFINING MACRO ATTRIBUTES Custom macro attributes can be defined only in top-level gitattributes files ( GITDIRinfoattributes . the. gitattributes file at the top level of the working tree, or the global or system-wide gitattributes files), not in. gitattributes files in working tree subdirectories. The built-in macro attribute binary is equivalent to: If you have these three gitattributes file: the attributes given to path tabc are computed as follows: By examining t. gitattributes (which is in the same directory as the path in question), Git finds that the first line matches. merge attribute is set. It also finds that the second line matches, and attributes foo and bar are unset. Then it examines. gitattributes (which is in the parent directory), and finds that the first line matches, but t. gitattributes file already decided how merge . foo and bar attributes should be given to this path, so it leaves foo and bar unset. Attribute baz is set. Finally it examines GITDIRinfoattributes . This file is used to override the in-tree settings. The first line is a match, and foo is set, bar is reverted to unspecified state, and baz is unset. As the result, the attributes assignment to tabc becomes:

No comments:

Post a Comment