2017-11-07 1 views
0

Ich verstehe, dass dies eine unorthodoxe Anforderung ist und der Hintergrund zu kompliziert ist, um zu erklären.git - die Geschichte auf ein Unterverzeichnis eingrenzen

Ich habe ein großes Verzeichnis BIG_DIR, das von Git verfolgt wird. Ich habe ein SUB_DIR unterhalb des BIG_DIR, das als Teil des BIG_DIR verfolgt wird.

Jetzt möchte ich nur die Git-Tracking-Verlauf im Zusammenhang mit SUB_DIR bleiben. Ich möchte BIG_DIR nicht mehr verfolgen, aber ich möchte SUB_DIR als unabhängiges Repository behalten und dabei seine Historie beibehalten.

Das gesamte BIG_DIR hat kein Remote Repo. Es ist alles lokal. wenn das es leichter macht.

+0

"die auch verfolgt wird", Sie meinen, es ist als Teil des Repository verfolgt verfolgt BIG_DIR, oder hat es ein eigenes Repository? –

+0

@ LasseVågsætherKarlsen als Teil von BIG_DIR. Ich habe den ursprünglichen Beitrag bearbeitet. Vielen Dank. – CodeNoob

+0

Siehe https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/ – falinsky

Antwort

0

Wenn Sie einen Repo mit einem vollständigen Verlauf wünschen, der nur SUB_DIR enthält, verwenden Sie git filter-branch.

git clone old-rep ./SUB_DIR_repo 
cd SUB_DIR_repo 
git filter-branch --subdirectory-filter='SUB_DIR' --prune-empty -- --all 

Die --prune-mepty ist optional; Es entfernt alle Commits, die den Inhalt von SUB_DIR nicht von den neuen Zweigen geändert haben.

An diesem Punkt SUB_DIR_repo enthält zwei Sätze von Refs: branches/tags zu einer neuen Geschichte der SUB_DIR zeigt, plus "Backup-Refs" (original/*) auf die volle Geschichte von BIG_DIR zeigt. Ehrlich gesagt ist der einfachste Weg, dies zu bereinigen, wieder von SUB_DIR_repo zu klonen. (Für die Re-Klon-Technik zu arbeiten, müssen Sie eine file:// URL statt einer lokalen Pfad verwenden.

git clone file://localhost/c/repos/SUB_DIR_repo new_repo 

zum Beispiel.)

Wenn Sie nicht die ganze Geschichte brauchen, können Sie natürlich könnte nur einen neuen Repo mit dem aktuellen Zustand des SUB_DIR

+0

Hallo Danke für die Antwort. Aber wenn ich dein Kommando gemacht habe, habe ich $ git filter-branch --parent-filter = 'SUB_DIR' --prune-empty - --all Verwendung: Git-Filter-Zweig [--ENV-Filter ] [ --tree-Filter ] \t [--index-Filter ] [--parent-Filter ] \t [--msg-Filter ] [--commit-Filter ] \t [--tag- Namensfilter ] [--subdirectory-filter ] \t [--original ] [-d ] [-f | --force] \t [ ...] – CodeNoob

+0

das Handbuch scheint zu vorschlagen, Eltern-Filter muss ein sein, nicht 'SUB_DIR' – CodeNoob

+0

Es tut mir leid, ich war thamemning halb im Schlaf. '--parent-filter' ist das falsche Argument. Festsetzung. –