Como eu faço
git status
ignorar diferenças de finalização de linha?
Informação de fundo:
Eu uso o Windows e o Linux aleatoriamente para trabalhar no projeto. O projeto está no Dropbox.
Eu descobri muito sobre como fazer git diff ignorar terminações de linha. Como eu uso o meld, o git diff abre o meld para cada arquivo. E o meld diz "arquivo idêntico".
Então, como faço para evitar isso. O Git deve abrir o meld apenas para arquivos alterados. E o git status não deve relatar os arquivos como alterados se apenas o final do arquivo for diferente.
EDITAR: Causa:
Isso aconteceu por causa desta configuração no Windows
core.autocrlf true
Portanto, verifiquei a cópia de trabalho no Linux e defini core.autocrlf como falso no Windows.
Ainda seria bom saber como fazer git status ignorar novas linhas diferentes.
core.autocrlf
seja a causa raiz no Windows, mas também uma cura no Linux. O problema é queautocrlf
é global no Windows e o repo não tem essa configuração.git/config
. Ao executar um local,git config core.autocrlf true
eliminei as alterações espúrias na minha cópia de trabalho NTFS clonada no Windows, mas acessada no Linux. (agora há apenas alterações espúrias com links simbólicos - links simbólicos NTFS FUNCIONAM em montagens fuseblk, mas Git os vê como modificados ...)Respostas:
Tente definir o valor core.autocrlf como este:
fonte
core.autocrlf true
é uma configuração funcional no CygWin.core.safecrlf false
é uma configuração funcional em git bash ou mingwEm vez disso, use .gitattributes, com a seguinte configuração:
.gitattributes seriam encontrados no mesmo diretório que seu .gitconfig global. Se .gitattributes não existir, adicione-o a esse diretório. Depois de adicionar / alterar atributos .git, você terá que fazer uma reinicialização a frio do repositório para aplicar com êxito as alterações aos arquivos existentes.
fonte
git status
. Na verdade, ele muda a forma como os arquivos são inseridos no repositório. ref: git-scm.com/docs/gitattributes#_code_text_codeEssa resposta parece relevante, uma vez que o OP faz referência à necessidade de uma solução multi-SO. Este artigo de ajuda do Github detalha as abordagens disponíveis para lidar com terminações de linhas entre sistemas operacionais. Existem abordagens globais e por repo para gerenciar terminações de linha cross-os.
Abordagem global
Configure o tratamento de terminações de linha Git no Linux ou OS X:
Configure o tratamento de terminações de linha Git no Windows:
Abordagem por repo:
Na raiz do seu repo, crie um
.gitattributes
arquivo e defina as configurações de finalização de linha para seus arquivos de projeto, uma linha por vez no seguinte formato:path_regex line-ending-settings
ondeline-ending-settings
é um dos seguintes:O
text
valor pode ser configurado posteriormente para instruir o Git sobre como lidar com terminações de linha para arquivos correspondentes:text
- Altera terminações de linha para terminações de linha nativas do sistema operacional.text eol=crlf
- Converte terminações de linhaCRLF
em check-out.text eol=lf
- Converte terminações de linhaLF
em check-out.text=auto
- Padrão sensato que deixa o controle de linha a critério do Git.Aqui está o conteúdo de um arquivo de amostra .gitattributes:
Saiba mais sobre como atualizar seu repo após alterar as configurações de término de linha aqui . Tldr:
Em alguns casos, isso é tudo o que precisa ser feito. Outros podem precisar completar as seguintes etapas adicionais:
fonte
Problema relacionado aos comandos git no sistema operacional Windows:
aviso: LF será substituído por CRLF em ...
O arquivo terá suas terminações de linha originais em seu diretório de trabalho.
Resolução :
Nenhuma mensagem de aviso aparece.
fonte
Criei um script para ignorar diferenças nas terminações de linha:
Ele exibirá os arquivos que não foram adicionados à lista de confirmação e foram modificados (após ignorar as diferenças nos finais de linha). Você pode adicionar o argumento "add" para adicionar esses arquivos ao seu commit.
Código-fonte: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Atualizações :
fonte
git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'
; para isso: meu @mods =git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-
;Eu uso windows e linux, mas a solução
core.autocrlf true
não me ajudou. Eu ainda não mudei nada depoisgit checkout <filename>
.Então, eu uso uma solução alternativa para substituir
git status
-gitstatus.sh
Acabei de comparar
md5sum
um arquivo e seu irmão no repositório.Exemplo de saída:
fonte