Merge de backups
2024-01-28 computer blogResolvi acabar de vez com os backups independentes das inúmeras versões do blogue e juntar em um único histórico. Para isso recorri ao bom e velho merge clássico, apenas juntando linhas de história não-relacionadas.
Antes de tudo é preciso ter todas as pastas com os repos locais acessíveis. Eles irão virar branches dentro do repo atual. Dentro de seu repositório atual use o comando git fetch para "baixar" o conteúdo dos outros repos "remotos". Em Windows o drive C: começa em /c/. Eu tenho quatro repositórios que foram criados de maneira independente em meus backups.
git fetch /c/Users/caloni/projects/blog/old_repo master:old_repo
Depois ao observar a data do último commit de cada repo podemos traçar a cronologia de qual o mais antigo para o mais novo:
git log -1 oldest_repo commit bd55f443417a56c2f717f53d35508420a10bda51 (HEAD -> oldest_repo) Date: Sat Mar 7 21:01:39 2015 -0300 git log -1 old_repo commit 6a2eea4c5e876b602c789c1b727a01c2e0159af1 (old_repo) Date: Tue Mar 22 09:01:39 2016 -0300 git log -1 not_so_old_repo commit 343c713273bf273ab8439af15de817f6335e00ab (not_so_old_repo) Date: Tue Jul 11 14:13:50 2017 -0300 git log -1 master commit 0de0e65389aaca984a48eb5294e224dbdcdda1b5 (origin/master, origin/HEAD, master) Date: Sat Jan 27 09:00:49 2024 -0300
Com base nisso renomeamos a branch master do repositório atual para current e a branch com o commit mais antigo para master. A ideia é começar com a master mais antiga e ir mergeando as outras branches até chegar na current. Ao final teremos uma master com todo o histórico passado, ainda que não-relacionado.
git checkout master git branch -m current git checkout oldest_repo git branch -m master
O resto é uma sequência de comandos merge sem o commit para antes limparmos o diretório de trabalho e reproduzirmos o estado exato dos arquivos no último commit de cada branch. Para isso é mais fácil apagar todos os arquivos e copiar os arquivos que estão em cada um dos repos.
git merge --allow-unrelated-histories -X theirs --no-commit next_repo rm -fr * cp -r ../next_repo/* . git commit
Por fim podemos apagar as branches de repos remotos, colocar tag nos merges feitos ou nenhum dos dois. A organização é sua. Todo o histórico está junto agora. Pode apagar os backups.