Dieser Artikel behandelt dies relativ gut:
https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown
Grundsätzlich ist dies einfacher, wenn Sie über die Befehlszeile arbeiten, als Sie vielleicht vermuten. Angenommen, Sie möchten 2 Git-Repos:
.gitone
.gittwo
Sie könnten sie so einrichten:
git init .
mv .git .gitone
git init .
mv .git .gittwo
Sie können eine Datei hinzufügen und sie nur einer solchen übertragen:
git --git-dir=.gitone add test.txt
git --git-dir=.gitone commit -m "Test"
Die Optionen für git stehen also zuerst an, dann der Befehl und dann die Optionen des git-Befehls. Sie könnten leicht genug einen Git-Befehl alias wie:
#!/bin/sh
alias gitone='git --git-dir=.gitone'
alias gittwo='git --git-dir=.gittwo'
So können Sie sich mit etwas weniger Tipparbeit auf das eine oder andere festlegen, wie z gitone commit -m "blah"
.
Was schwieriger zu werden scheint, ist das Ignorieren. Da sich .gitignore normalerweise im Projektstamm befindet, müssen Sie einen Weg finden, dies ebenfalls zu ändern, ohne den gesamten Stamm zu wechseln. Oder Sie könnten .git / info / exclude verwenden, aber alle Ignorierungen, die Sie dann ausführen, werden nicht festgeschrieben oder gepusht - was andere Benutzer vermasseln könnte. Andere, die eines der beiden Repos verwenden, pushen möglicherweise einen .gitignore, was zu Konflikten führen kann. Mir ist nicht klar, wie ich diese Probleme am besten lösen kann.
Wenn Sie GUI-Tools wie TortoiseGit bevorzugen, haben Sie auch einige Herausforderungen. Sie können ein kleines Skript schreiben, das .gitone oder .gittwo vorübergehend in .git umbenennt, damit die Annahmen dieser Tools erfüllt werden.
git subtree
wird den Job erledigen.