Manuelle Schritte mit einfachen Befehlen git
Der Plan ist, einzelne Verzeichnisse in seine eigene repos zu spalten, so dass sie dann miteinander verschmelzen. Die folgenden manuellen Schritte verwenden keine Geek-to-Scripts, sondern einfach zu verstehende Befehle und können dazu beitragen, zusätzliche N Unterordner in einem anderen einzelnen Repository zusammenzuführen.
Teilen
Lassen Sie uns Ihre ursprünglichen Repo nehmen ist: original_repo
1 - Split apps:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Split Libs
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
C wenn Sie mehr als 2 Ordner haben. Jetzt sollten Sie zwei neue und temporäre Git-Repositories haben.
Conquer von Anwendungen und Libs Merging
3 - die neue Repo-Marke vorbereiten:
mkdir my-desired-repo
cd my-desired-repo
git init
Und Sie werden mindestens eine verpflichten zu machen brauchen. Wenn die folgenden drei Zeilen übersprungen werden soll, wird Ihre erste Repo sofort erscheinen im Root-Verzeichnis Ihrer Repo:
touch a_file_and_make_a_commit
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
Mit der temporären Datei commited, merge
Befehl in späteren Abschnitt wird wie erwartet anhalten.
4 - erste Merge apps Repo:
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
Jetzt sollten Sie apps Verzeichnis in Ihrem neuen Repository sehen. git log
sollte alle relevanten historischen Commit-Nachrichten anzeigen.
5 - Merge Libs Repo nächste in der gleichen Art und Weise:
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
weiter, wenn Sie mehr als 2 repos zu fusionieren haben.
Referenz: Merge a subdirectory of another repository with git
Ordentlich Werkzeuge, die Sie hier finden. Insight auf "Kasse": "Git Pull" ist das gleiche wie "Git fetch && git merge". Der "Fetch" -Teil ist unschädlich, da Sie "lokal holen". Also denke ich, dass dieser Checkout-Befehl derselbe wie "git merge master-B" ist, was etwas selbstverständlicher ist. Siehe http://www.kernel.com.org/pub/software/scm/git/docs/git-pull.html – phord
Leider ist das Git-Stich-Repo-Tool heute wegen der schlechten Abhängigkeiten kaputt. – Henrik
@Henrik Welches Problem haben Sie genau erlebt? Es funktioniert für mich, obwohl ich 'exit PERL5LIB =" $ PERL5LIB:/usr/local/git/lib/perl5/site_perl/"' zu meiner Bash-Konfiguration hinzufügen musste, damit es Git.pm finden konnte. Dann habe ich es mit cpan installiert. –