Ich habe ein ziemlich großes Git-Repository, das ein Verzeichnis enthält, in dem ich den Bibliothekscode verwalte. Das Verzeichnis enthält eine Reihe von Unterverzeichnissen.
%Vor% Nehmen wir nun an, ich möchte die Quell-Unterverzeichnisse A,...,M
öffnen und die Unterverzeichnisse N,...,Z
close source beibehalten. Nehmen wir auch an, ich würde gerne:
A,...,M
in einem einzigen Open-Source-Repository. Der Grund dafür ist, dass die Verzeichnisse A,...,M
Abhängigkeiten haben und es wäre verwirrend, sie in einzelne Repositories aufzuteilen. lib/pub
und lib/pvt
erstellen, aber dies hätte Kaskadeneffekte, die Verweise anderswo ändern oder viele symbolische Links erfordern würden ( lib/A -> lib/pub/A
). git subtree
, wo ich Code entweder in meinem geschlossenen Quell-Repository oder in der Open-Source-Version ändern kann und ich die Änderungen zwischen den beiden Repositories problemlos synchronisieren kann. Ich habe in stackoverflow und google nach einer Lösung gesucht, aber es scheint keine offensichtliche Lösung zu geben. Konzeptionell ist dies etwas, das git subtree
ausführen kann, aber es funktioniert nur mit einem einzigen Unterverzeichnis.
Ich habe in das git-subtree
-Skript mit der Absicht geschaut, es zu ändern.
Es scheint mir, dass ich, wenn ich subtree_for_commit()
ändern sollte, git subtree split
dazu bringen kann, mehr als ein einzelnes Verzeichnis zum Teilen zu berücksichtigen. Aber mein Wissen über Git ist nicht genug, um zu verstehen, was das Skript macht, und es zu modifizieren, ohne Dinge zu brechen.
Wenn Sie eine Lösung für das oben genannte Problem oder andere Hinweise zum Ändern von git-subtree
haben, lassen Sie es mich wissen.
Dies scheint eine häufige Anfrage zu sein, aber ich glaube nicht, dass es eine einfache Antwort gibt, wenn die Ordner so zusammengemischt werden.
Die allgemeine Methode, die ich vorschlage, die mit anderen Ordnern gemischte Bibliothek aufzuteilen, ist folgende:
Machen Sie eine Verzweigung mit dem neuen Stamm für die Bibliotheksverzeichnisse:
%Vor%Verwenden Sie etwas, um den Verlauf neu zu schreiben, um die Teile zu entfernen, die nicht Teil der Bibliothek sind. Ich bin kein Experte in diesem Bereich, aber ich konnte experimentieren und fand, dass so etwas funktioniert:
%Vor%Hinweis: Eventuell müssen Sie die durch filter-branch erstellte Sicherung löschen, wenn Sie aufeinanderfolgende Befehle ausführen.
%Vor%Schließlich, erstellen Sie einfach ein neues Repository für die Bibliothek und ziehen Sie alles, was übrig ist:
%Vor%Wenn Sie sowohl Unterverzeichnisse als auch Dateien in einem Verzeichnis src haben, das Sie in ein separates Repository aufteilen möchten, das später zu einem Submodul wird, gab es nicht viele Antworten. Angenommen, Sie möchten, dass dir2 und file2 in einen neuen Repo srcpublic verschoben werden, dann im ursprünglichen Repo,
git mv src / datei2 src / dir2; git Teilbaum split -P Dir2 -b branch_dir2
Im neuen Repo, Unterbaum pull / dir2 branch_dir2; git mv dir2 / file2 ../
Neues Repo: srcpublic - Datei2, Verzeichnis2
Original Repo: src - Datei1, Datei2, dir1, dir2
Wenn es Dutzende von Ordnern und Dateien gibt, hilft es, die Befehle in ein Skript zu schreiben.
Tags und Links git git-subtree