Git Teilbaum und mehrere Verzeichnisse

8

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:

  • Behalten Sie 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.
  • Behalte die Struktur meines geschlossenen Quell-Repository intakt. Zum Beispiel könnte ich die Unterverzeichnisse 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 ).
  • Haben Sie eine Lösung ähnlich wie 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.

    
Bill Zissimopoulos 07.02.2014, 06:51
quelle

2 Antworten

3

Aufteilen eines Teilbaums gemischt mit Dateien aus dem übergeordneten Projekt

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:

  1. Machen Sie eine Verzweigung mit dem neuen Stamm für die Bibliotheksverzeichnisse:

    %Vor%
  2. 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%
  3. Schließlich, erstellen Sie einfach ein neues Repository für die Bibliothek und ziehen Sie alles, was übrig ist:

    %Vor%
johnb003 03.03.2014 22:10
quelle
0

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.

    
JeepersCreepers 27.01.2018 00:27
quelle

Tags und Links