Realocar todo o histórico de um repositório Git

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 --follownã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 . htmlfaria)

Código

git filter-branch --tree-filter 'mkdir html && find . -mindepth 1 -maxdepth 1 ! -name ".git*" ! -name "html" -exec mv {} html/ ;' HEAD