Pergunta

Eu tenho dois sub-diretórios cada um com um repo, assim:

PPP/
 |--ABC/
 |   |--.git/
 |   |--AAA/
 |   |    BBB/
 |   |   CCC/
 |   
 |--DEF/
 |   |--.git/
 |   |--DDD/
 |   |--EEE/

E gostaria de combiná-los em um repo, por isso, gostaria de assumir a estrutura de diretórios seria assim:

PPP/
 |--.git/
 |--ABC/
 |   |--AAA/
 |   |--BBB/
 |   |--CCC/
 |   
 |--DEF/
 |   |--DDD/
 |   |--EEE/

É este posible?

Também actualmente várias pessoas têm os repos em suas máquinas. Quanto mais complicado faz que a vida make?

Ta.

Foi útil?

Solução

Você pode fazer o que você está descrevendo como esta:

  1. Mover o conteúdo de ABC a um subdiretório ABC/, e corrigir a história de modo que parece que ele sempre esteve lá:

    $ cd /path/to/ABC
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&ABC/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    Agora, sua estrutura de diretório é ABC/ABC/your_code

  2. Mesmo para o conteúdo de DEF:

    $ cd /path/to/DEF
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&DEF/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    Agora, sua estrutura de diretório é DEF/DEF/your_code

  3. Finalmente, criar o repositório PPP e puxar tanto ABC e DEF para ele:

    $ mkdir /path/to/PPP
    $ cd /path/to/PPP
    $ git init
    $ git pull /path/to/ABC
    $ git pull /path/to/DEF
    

    Agora você tem PPP/ABC/your_code e PPP/DEF/your_code, juntamente com toda a história.

Você deve provavelmente pedir-lhe colegas para executar os comandos anteriores em seu sistema, a fim de que todos sejam sincronizados.

Nota: funky filter-branch comandos é proveniente da página homem . : -)

Outras dicas

Você realmente precisa de fundir os dois repositórios existentes em um único repositório, ou você só quer agrupá-los?

Se você quiser apenas para agrupá-los, então git-submódulo vai fazer o que quiser: você vai acabar com três repositórios onde os top-level um links para a corrente dois

.

Como um guia:

  • Você deve fundi-los em um único repositório se você estiver indo para aumentar o acoplamento entre eles, para que não faz mais sentido usar uma versão do repo A com uma versão diferente do repo B.

  • Você deve usar submódulos se eles permanecem um pouco separado (que às vezes se faz sentido para o trabalho em um isoladamente), mas você quer a conveniência de ser capaz de trabalhar com eles juntos (por exemplo baixar ambos ao mesmo tempo, checkpoint em bom estados em todo ambos, etc).

Usando submódulos vai evitar problemas com as cópias existentes de repositórios, pois a história não muda. Fundindo-se criar uma nova história e que será mais difícil para as pessoas que trabalham nos ramos existentes para fundir as suas alterações.

Para mim, parece difícil de fazer do jeito que você quer, porque a história de ambos projeto não irão se fundir.

Meu melhor conselho seria para criar um novo repositório para conter ABC e DEF, mantendo repo velho destes dois para ter backup de história e começar uma história fresca com este novo projecto.

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