Este artigo cobre isso relativamente bem:
https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown
Basicamente, se você estiver trabalhando na linha de comando, isso é mais simples do que você pode imaginar. Suponha que você queira 2 repositórios git:
.gitone
.gittwo
Você pode configurá-los assim:
git init .
mv .git .gitone
git init .
mv .git .gittwo
Você pode adicionar um arquivo e confirmá-lo em apenas um, desta forma:
git --git-dir=.gitone add test.txt
git --git-dir=.gitone commit -m "Test"
Portanto, as opções do git vêm primeiro, depois o comando e, a seguir, as opções do comando git. Você poderia facilmente criar um alias para um comando git como:
#!/bin/sh
alias gitone='git --git-dir=.gitone'
alias gittwo='git --git-dir=.gittwo'
Então você pode se comprometer com um ou outro com um pouco menos de digitação, como gitone commit -m "blah"
.
O que parece ficar mais complicado é ignorar. Visto que .gitignore normalmente fica na raiz do projeto, você também precisa encontrar uma maneira de mudar isso sem mudar a raiz inteira. Ou você pode usar .git / info / exclude, mas todos os ignora que você executa não serão confirmados ou enviados - o que pode atrapalhar outros usuários. Outros que usam qualquer um dos repositórios podem enviar um .gitignore, o que pode causar conflitos. Não está claro para mim a melhor maneira de resolver esses problemas.
Se você preferir ferramentas GUI como o TortoiseGit, você também terá alguns desafios. Você pode escrever um pequeno script que renomeie .gitone ou .gittwo para .git temporariamente para que as suposições dessas ferramentas sejam atendidas.
git subtree
fará o trabalho.