Tenho um projeto git, onde ao longo dos anos, finais de linha inconsistentes apareceram eventualmente. Eu queria criar uma nova ramificação, verificar o commit inicial, alterá-lo .gitattributes
para garantir que os arquivos .c, .cpp, .h, .hpp usem finais de linha LF. Então, eu queria simplesmente escolher todos os commits restantes. Isso obviamente falhou, porque cada arquivo agora parece ser modificado para git quando eu seleciono commits. Fazer isso manualmente não é uma opção, pois agora tenho perto de 1000 commits.
Qual é a maneira automatizada de fazer isso? Uma maneira, eu acho, é escolher automaticamente por hash mergeing todos os conflitos, pegando os escolhidos como estão, e então executando dos2unix em todos os arquivos e então alterando o último commit com mudanças locais. Mas mesmo isso não é tão trivial de fazer corretamente. Existe algo disponível que faça a tarefa?
Instale
git-filter-repo
, adicione$PATH
e execute em um novo clone (ou faça um backup):Atualização: a solução aceita funciona muito bem e MUITO rápido. Ela reconstrói o histórico para um checkout completo limpo
O código abaixo falha para arquivos removidos.
Tentei pedir ao deep seek uma solução. Como sempre, não funcionou, nunca funciona. Mas ele me deu um script que eu poderia depurar (pelo menos algo para começar). No final, esta versão parece funcionar para mim:
Talvez seja possível torná-lo menos tagarela para reduzir todo o registro do comando git. Alguma sugestão/melhoria?