Como posso mover um único diretório de um repositório git para um novo repositório, mantendo a história?

StackOverflow https://stackoverflow.com/questions/811251

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu herdei um repositório git que contém vários projetos em diretórios separados. Eu gostaria de dividir o repositório em novos repositórios individuais, um para cada projeto e, em seguida, tem o repositório mestre contêm os projetos como submódulos. Eu gostaria de fazer tudo isso mantendo o histórico de revisão dos projectos individuais, se possível.

Eu poderia clonar o repositório para cada projeto e remover todos os outros projectos de cada vez, mas há uma maneira melhor para evitar que a história clonado em cada novo repositório do projeto?

Foi útil?

Solução

Você pode usar git filter-branch para reescrever a história de um projeto. A partir da documentação:

Para reescrever o repositório para olhar como se foodir / tinha sido a sua raiz do projeto, e descartar todos os outros história:

git filter-branch --subdirectory-filter foodir -- --all

Faça várias cópias do seu repo, fazer isso para cada subdiretório que deseja dividir para fora, e você deve acabar com o que você está procurando.

Outras dicas

Para exportar uma pasta como um novo repositório que você precisa:

  1. Para clonar o repositório onde a pasta que deseja exportar é.
  2. Para criar um repositório vazio no seu provedor de hospedagem como GitHub, para armazenar a pasta exportada.
  3. Abra a pasta do repositório clonado e execute este comando:

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
    

O ponto de git é que a história é incorporada em cada commit por hashing o pai cometeu. Você pode "repetir" os commits (isto é, essencialmente, como funciona o SVN importador) em um novo repositório, e apenas mantendo cada sub-projeto. Isso, no entanto, iria destruir o significado da cometem hashes. Se você não tem nenhum problema com isso, então que assim seja.

No passado eu acabei clonado lo e segui em frente. Isso torna as coisas maiores, mas o espaço em disco é barato; meu tempo é caro.

Eu também não sei de nenhuma ferramenta para emendar um diretório. Eu suponho que você poderia git-log no diretório para encontrar todos os commits sobre ele, então repetir os commits com algo como git-fast-exportação?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top