Essa 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:
git config --global core.autocrlf input
Configure o tratamento de terminações de linha Git no Windows:
git config --global core.autocrlf true
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
onde line-ending-settings
é um dos seguintes:
- texto
- binário (arquivos para os quais o Git não deve modificar terminações de linha - pois isso pode fazer com que alguns tipos de imagens, como PNGs, não sejam renderizados em um navegador)
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 linha CRLF
em check-out.
text eol=lf
- Converte terminações de linha LF
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:
# Set the default behavior for all files.
* text=auto
# Normalized and converts to
# native line endings on checkout.
*.c text
*.h text
# Convert to CRLF line endings on checkout.
*.sln text eol=crlf
# Convert to LF line endings on checkout.
*.sh text eol=lf
# Binary files.
*.png binary
*.jpg binary
Saiba mais sobre como atualizar seu repo após alterar as configurações de término de linha aqui . Tldr:
faça backup de seus arquivos com Git, exclua todos os arquivos em seu repositório (exceto o diretório .git) e restaure os arquivos de uma vez. Salve seus arquivos atuais no Git, para que nenhum de seu trabalho seja perdido.
git add . -u
git commit -m "Saving files before refreshing line endings"
Remova o índice e force o Git a examinar novamente o diretório de trabalho.
rm .git/index
Reescreva o índice Git para pegar todas as novas terminações de linha.
git reset
Mostra os arquivos normalizados reescritos.
Em alguns casos, isso é tudo o que precisa ser feito. Outros podem precisar completar as seguintes etapas adicionais:
git status
Adicione todos os seus arquivos alterados de volta e prepare-os para um commit. Esta é sua chance de inspecionar quais arquivos, se houver, não foram alterados.
git add -u
É perfeitamente seguro ver muitas mensagens aqui que dizem "aviso: CRLF será substituído por LF no arquivo."
Reescreva o arquivo .gitattributes.
git add .gitattributes
Envie as alterações para seu repositório.
git commit -m "Normalize all the line endings"