git: mantém o changelog para o arquivo quando se move para um repositório diferente

5

Eu estou versionando meus arquivos de configuração com o git. Agora preciso mover alguns dos meus arquivos de configuração para um repositório diferente, para obter uma estrutura limpa. Existe uma maneira que eu possa manter o log de alterações para um arquivo se eu movê-lo para um repositório diferente?

Eu gostaria de ter todos os commits do repo A no repo B que tocou no arquivo A / a se eu movê-lo para B / a. Idealmente, se eu depois mover A / x para B / x, eu gostaria de ver B / ae B / x aparecerem juntos em submissões que tocaram em ambos os arquivos no repositório A. Eu não esperaria ter nenhuma etapa de desenvolvimento de A / uma fusão em qualquer um dos commits de B, eu só quero que eles apareçam lá depois.

Obrigado, melhores cumprimentos

    
por exic 16.07.2010 / 12:48

3 respostas

5

Suponha que você queira transferir o histórico de filename.conf de um repositório de origem para outro repositório de recebimento. Eu acho que a estratégia que você quer seguir é:

  1. No repositório de origem, crie uma ramificação de confirmações que são reescritas para conter apenas filename.conf .
  2. Mesclar a linha independente de confirmações em uma ramificação normal no repositório de recebimento.

Definitivamente, faça backups de seus repositórios antes de fazer isso!

No repositório de origem, use o filtro-branch para reconstruir o histórico removendo tudo, exceto filename.conf .

git checkout -b filtered-commits
git filter-branch -f --prune-empty --tree-filter 'find . -not -name filename.conf -exec rm {} \;' filtered-commits

Em seguida, no repositório de recebimento:

git pull path/to/source/repo

Se você também precisar mover o caminho em que filename.conf está dentro do repositório, provavelmente precisará usar a opção --subdirectory-filter em git filter-branch .

    
por 17.07.2010 / 08:58
0

Eu estava pensando em algo assim para o Mercurial no outro dia. Eu acho que eu iria escrever um script (provavelmente python, mas realmente qualquer coisa que pudesse executar comandos shell) para:

  1. Para cada revisão que tocou no Arquivo X (chame-o de "#rev")
    1. Copie o arquivo X de #rev para o novo local
    2. Confirme no novo repositório com a mensagem de #rev

Seria bom se o script permitisse a edição de comentários e o "esquecimento" de algumas versões, quando desejado.

    
por 16.07.2010 / 15:31
0

Como git filter-branch pode ser intoleravelmente lento para um grande repositório, este truque usando git log , git format-patch e git am pode ser uma alternativa útil.

    
por 04.10.2013 / 18:53