Эта статья освещает это относительно хорошо:
https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown
В принципе, если вы работаете из командной строки, это проще, чем вы думаете. Предположим, вам нужно 2 репозитория git:
.gitone
.gittwo
Вы можете настроить их так:
git init .
mv .git .gitone
git init .
mv .git .gittwo
Вы можете добавить файл и зафиксировать его только в одном:
git --git-dir=.gitone add test.txt
git --git-dir=.gitone commit -m "Test"
Итак, сначала идут параметры для git, затем команда, а затем параметры команды git. Вы можете легко использовать псевдоним команды git, например:
#!/bin/sh
alias gitone='git --git-dir=.gitone'
alias gittwo='git --git-dir=.gittwo'
Таким образом, вы можете выполнить одно или другое, немного меньше печатая, например gitone commit -m "blah"
.
То, что кажется более сложным, игнорируется. Поскольку .gitignore обычно находится в корне проекта, вам нужно будет найти способ переключить и его, не переключая весь корень. Или вы можете использовать .git / info / exclude, но все игнорирования, которые вы выполняете, не будут зафиксированы или отправлены, что может испортить других пользователей. Другие, использующие любое репо, могут отправить .gitignore, что может вызвать конфликты. Мне не ясно, как лучше всего решить эти проблемы.
Если вы предпочитаете инструменты с графическим интерфейсом, такие как TortoiseGit, у вас также будут некоторые проблемы. Вы можете написать небольшой скрипт, который временно переименовывает .gitone или .gittwo в .git, чтобы выполнялись предположения этих инструментов.
git subtree
выполнит свою работу.