Temos um projeto git que tem uma grande história.
Especificamente, no início do projeto havia muitos arquivos de recursos binários no projeto, eles agora foram removidos porque são recursos externos.
No entanto, o tamanho do nosso repositório é> 200 MB (o checkout total é atualmente de ~ 20 MB) devido a ter esses arquivos previamente confirmados.
O que gostaríamos de fazer é "recolher" o histórico de modo que o repositório pareça ter sido criado a partir de uma revisão posterior. Por exemplo
1-----2-----3-----4-----+---+---+
\ /
+-----+---+---+
- Repositório criado
- Grande conjunto de arquivos binários adicionados
- Grande conjunto de arquivos binários removidos
- Novo 'início' pretendido do repositório
Então, efetivamente, queremos perder o histórico do projeto antes de um certo ponto. Neste ponto, há apenas um branch, então não há complicação em tentar lidar com vários pontos de início, etc. No entanto, não queremos perder todo o histórico e iniciar um novo repositório com a versão atual.
Isso é possível ou estamos condenados a ter um repositório inchado para sempre?
fonte
Você pode usar
git filter-branch
com enxertos para tornar o commit número 4 o novo commit raiz do seu branch. Basta criar o arquivo.git/info/grafts
com apenas uma linha contendo o SHA1 do commit número 4.Se você fizer um
git log
ougitk
verá que esses comandos exibirão o commit número 4 como a raiz do seu branch. Mas nada terá realmente mudado em seu repositório. Você pode excluir.git/info/grafts
e a saída degit log
ougitk
será como antes. Para realmente tornar o commit número 4 o novo root, você terá que executargit filter-branch
, sem argumentos.fonte
git gc --prune=0
não parece limpá-los.git gc --prune=now
limpa fisicamente todos os commits que não são mais referenciados. Se isso não funcionar para você, então você pode ter algum branch de rastreamento remoto que ainda faz referência à raiz antiga. Listar comgit branch -r
e remover a ramificação remota, por exemplo, comgit branch -rd origin/master
e executargit gc --prune=now
novamente.Graças à postagem de JesperE eu pesquisei
git-filter-branch
- pode realmente ser o que você deseja. Parece que você poderia reter seus commits anteriores também, exceto que eles seriam modificados desde que seus Big Files foram removidos. Na página do manual git-filter-branch :Certifique-se de ler aquela página de manual ... obviamente, você deseja fazer isso em um clone sobressalente de seu repositório para ter certeza de que funciona como esperado.
fonte
É o
git-fast-export
que você está procurando?fonte