Procurando uma maneira de reimportar modificações feitas em um repositório (cujo diretório raiz foi modificado usando git filter-branch para remover pastas de nível superior desnecessárias) para seu ancestral, felizmente caí no subdiretório git .
Aqui está um trecho do README.md para dar uma ideia do que é:
Em comparação com outras abordagens (git-submodule, git-subtree) , git-subdir:
- Incorpora o conteúdo real, não apenas uma referência (como git-subtree e diferente de git-submodule).
- Não armazena metadados e não há requisitos para que os commits importados permaneçam intactos. Rebase, corrija e filtre de acordo com o seu conteúdo.
- Não tenta mapear os commits nos repositórios. Ele se concentra nos commits que precisam ser importados ou exportados no momento, e não se preocupa com os commits históricos.
- Na verdade, não existe nenhum estado persistente (exceto algumas opções de linha de comando salvas automaticamente como padrão para mais tarde).
- Ficará feliz em obter os resultados de git-subtree, subtree merge ou qualquer outra forma de sincronizar pastas. Na verdade, mesmo se você copiou a subpasta via drag’n’drop ou cp -r, você ainda pode usar git-subdir para sincronizar as alterações.
- Sincroniza de ambas as maneiras: você pode fazer commit no repositório embutido e então importar os commits para o master, ou você pode fazer commit no repositório master e então exportar os commits para o embutido. Na verdade, você pode alternar entre as duas abordagens.
Para simplificar, a ideia de git-subdir é que, conceitualmente, queremos uma abordagem semelhante à seleção seletiva em vez da semântica estrita de mesclagem / rebase normal.
Eu testei duas vezes por agora e parece funcionar perfeitamente.
Espero que isso possa inspirar alguém.
Eric