This article covers this relatively well:
https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown
Basically if you're working from the command-line this is simpler than you might guess. Suppose you want 2 git repos:
.gitone
.gittwo
You could set them up like so:
git init .
mv .git .gitone
git init .
mv .git .gittwo
You could add a file and commit it to only one like so:
git --git-dir=.gitone add test.txt
git --git-dir=.gitone commit -m "Test"
So the options for git come first, then the command, then the git command's options. You could easily enough alias a git command like:
#!/bin/sh
alias gitone='git --git-dir=.gitone'
alias gittwo='git --git-dir=.gittwo'
So you can commit to one or the other with a bit less typing, like gitone commit -m "blah"
.
What appears to get trickier is ignores. Since .gitignore normally sits in the project root, you'd need to find a way to switch this as well without switching the entire root. Or, you could use .git/info/exclude, but all the ignores you perform then won't be committed or pushed - which could screw up other users. Others using either repo might push a .gitignore, which may cause conflicts. It's not clear to me the best way to resolve these issues.
If you prefer GUI tools like TortoiseGit you'd also have some challenges. You could write a small script that renames .gitone or .gittwo to .git temporarily so these tools' assumptions are met.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…