Wie kann ich ein einzelnes Verzeichnis von einem Git-Repository in ein neues Repository verschieben, während die Geschichte beibehalten?

StackOverflow https://stackoverflow.com/questions/811251

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe ein Git-Repository enthält mehrere Projekte in separaten Verzeichnissen geerbt. Ich möchte das Repository in neue einzelne Repositories aufgeteilt, eine für jedes Projekt und anschließend das Master-Repository enthalten haben, die Projekte als Submodule. Ich möchte all dies tun, während die Revisionshistorie der einzelnen Projekte nach Möglichkeit beibehalten wird.

Ich konnte das Repository für jedes Projekt klonen und alle anderen Projekte jedes Mal entfernen, aber es gibt einen besseren Weg, die geklonte Geschichte in jedem neuen Projekt-Repository zu vermeiden,?

War es hilfreich?

Lösung

Sie können mit git filter-branch die Geschichte eines Projekts neu zu schreiben. Aus der Dokumentation:

  

das Repository zu umschreiben aussehen, als   wenn foodir / hatte sein Projekt Wurzel gewesen,   und verwerfen alle anderen Geschichte:

git filter-branch --subdirectory-filter foodir -- --all

Machen Sie mehrere Kopien Ihrer Repo, tun, dass Sie für jedes Unterverzeichnis aufteilen wollen, und Sie sollten mit dem, was Sie suchen aufzuwickeln.

Andere Tipps

Um einen Ordner als neues Repository exportieren Sie brauchen:

  1. das Repository klonen, wo der Ordner, den Sie exportieren möchten, ist.
  2. Um ein leeres Repository auf Ihrem Hosting-Anbieter als GitHub, erstellen Sie den exportierten Ordner zu speichern.
  3. öffnen Sie die geklonte Repository-Ordner, und führen Sie folgenden Befehl ein:

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
    

Der Punkt von git ist, dass die Geschichte in jedem von Commit ausgeführt ist Hashing die Eltern begehen. Sie könnte „replay“ die Commits (dies im Wesentlichen ist, wie der SVN-Importeur arbeitet) in ein neues Repository und nur jedes Teilprojekt zu halten. Dies würde jedoch zerstört die Bedeutung der Hashes begehen. Wenn Sie kein Problem damit haben, dann soll es so sein.

In der Vergangenheit habe ich es einfach geklont und ging weiter. Dies macht die Dinge größer, aber Speicherplatz ist billig; meine Zeit ist teuer.

Ich weiß auch nicht von Werkzeugen ein Verzeichnis Spleiß aus. Ich nehme an, Sie könnten auf das Verzeichnis git-log alle Commits zu finden auf sie dann die Commits Wiedergabe mit so etwas wie git-fast-Export?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top