Atualizar uma equipe de desenvolvimento com o histórico reescrito de repositórios Git, removendo arquivos grandes
Eu tenho um repositório Git com alguns binários muito grandes nele. Não preciso mais deles e não ligo para poder fazer o check-out dos arquivos de confirmações anteriores. Portanto, para reduzir o tamanho do repositório, desejo excluir os binários do histórico completamente.
Após uma pesquisa na web, concluí que minha melhor opção (somente?) É usargit-filter-branch
:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
Parece uma boa abordagem até agora?
Supondo que a resposta seja sim, tenho outro problema para enfrentar. omanual git tem esse aviso:
AVISO! O histórico reescrito terá nomes de objetos diferentes para todos os objetos e não convergirá com a ramificação original. Você não poderá enviar e distribuir facilmente a ramificação reescrita na parte superior da ramificação original. Por favor, não use este comando se você não souber todas as implicações e evite usá-lo de qualquer maneira, se um simples commit simples for suficiente para corrigir seu problema. (Consulte a seção "RECUPERANDO DO UPSTREAM REBASE" no git-rebase (1) para obter mais informações sobre como reescrever o histórico publicado.)
Temos um repositório remoto em nosso servidor. Cada desenvolvedor pressiona e puxa a partir dele. Com base no aviso acima (e minha compreensão de comogit-filter-branch
funciona), acho que não vou conseguirgit-filter-branch
na minha cópia local e pressione as alterações.
Então, eu estou tentando planejar as seguintes etapas:
Diga a todos os meus desenvolvedores para confirmar, enviar por push e parar de trabalhar um pouco.Faça login no servidor e execute o filtro no repositório central.Todos devem excluir suas cópias antigas e clonar novamente no servidor.Isso soa certo? Essa é a melhor solução?