Objetivo
- Mova todo o conteúdo de um repositório Git para um novo subdiretório
- Aplicar a mudança em todos os commits de todo o histórico
Notas
- Você também pode simplesmente mover o conteúdo do último commit em seu repositório. O Git é capaz de seguir o conteúdo movido no histórico usando
git log --follow
. - Este código move o conteúdo de cada commit, então
--follow
não é mais necessário. - No entanto, isso significa que todos os commits serão alterados. SHAs antigos não são mais válidos. Cada clone do repositório precisa ser clonado do início novamente.
Como funciona
- Para cada confirmação, crie um novo diretório “html”
- Mova tudo para o novo diretório, exceto “.git *” (inclui “.gitignore”) e “html” (caso contrário, um simples
mv . html
faria)
Código
git filter-branch --tree-filter 'mkdir html && find . -mindepth 1 -maxdepth 1 ! -name ".git*" ! -name "html" -exec mv {} html/ ;' HEAD