Como reproduzir o histórico do repositório Git no subdiretório?

4

Digamos que eu tenha dois repositórios aye e bee e eu quero me livrar de bee , de forma que o histórico linear de bee/master seja "repetido" em um novo subdiretório ( vários níveis de profundidade) de aye . Eu só quero os arquivos e as mensagens de commit, eu não me importo com IDs de commit. Eu faço quero um histórico sensível, então git subtree add --prefix=subdirectory e git read-tree --prefix=subdirectory/ não são o que eu estou procurando.

Ambos os repositórios são privados, portanto não há risco de reescrever o histórico de outra pessoa. No entanto, bee tem um submódulo cee .

    
por l0b0 30.04.2016 / 17:13

1 resposta

6

Primeiro, reescreva o histórico de bee para mover todos os arquivos para o subdiretório :

cd /path/to/bee
git filter-branch -f --prune-empty --tree-filter '
dir="my fancy/target directory"
if [[ ! -e "$dir" ]]
then
    mkdir -p "$dir"
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files "$dir"
fi'

git log --stat deve mostrar todos os arquivos exibidos em my fancy/target directory . Agora você pode mesclar o histórico em aye com facilidade :

cd /path/to/aye
git remote add -f bee /path/to/bee
git checkout -b bee-master bee/master
git rebase master
git checkout master
git rebase bee-master

Recrie o submódulo em aye :

git submodule add git://my-submodule 'my fancy/target directory/my-submodule'

Por fim, você pode limpar aye :

git rm 'my fancy/target directory/.gitmodules'
git branch -D bee-master
git remote remove bee

Você também pode ter que corrigir quaisquer caminhos absolutos em seu repositório (por exemplo, em .gitignore )

    
por 30.04.2016 / 18:18

Tags