2017-08-15 2 views
1

Ich kann eine Hand verwenden, die den richtigen Weg dafür bietet. Ich habe ein TFVC-Stil-Repository, in dem es mehrere Zweige gibt. Ich möchte das Ganze zu git überführen. Ich benutze git tfs (https://github.com/git-tfs/git-tfs), um den TFVC-Kram in lokale Git-Repos zu exportieren, aber der Verlauf ist zu komplex und deshalb kann ich nicht alle Zweige auf einmal exportieren. Das ist an sich kein Problem, da wir auch auf eine andere Verzweigungsstrategie migrieren wollen.Verschmelzung separater Git-Repos in einen

Was das Plugin mir erlaubt, ist jeden Zweig mit einer Teilmenge seiner Geschichte zu einem lokalen Git Repo zu exportieren. Also lande ich mit lokalen Repos für "Master" und einem für jede Version, die in TFVC gespeichert wurde.

Jetzt möchte ich diese in einem einzigen neuen Git Repo verpflichten. Der Master sollte in einen neuen Master-Zweig gehen und für jeden Release einen Zweig "releases/release-xyz" erstellen. Wie kann ich den gesamten Code + Verlauf von jedem lokalen Repo in den richtigen Zweig im neuen Repo übertragen? Ich fand Stücke und Stücke, die eine Fernbedienung hinzufügten und jeden Zweig schoben, aber ich möchte sicherstellen, dass ich hier nichts vergesse. Der Zusammenführungsverlauf zwischen den Zweigen ist mir egal, solange der exportierte Verlauf für jeden Zweig selbst intakt ist.

So exportierte Struktur:

folder A (master) 
folder B (release-abc) 
folder C (release-xyz) 

und Zielstruktur:

repo/master 
repo/releases/release-abc 
repo/releases/release-xyz 
+3

Im Grunde, erstellen Sie einen neuen Repo, fügen Sie diesen Repo als Remote zu jedem Ihrer Repositories. Dann drücken Sie zum neuen Repo unter Verwendung z. 'git push newrepo master: releases/release-abc - Dies wird den Master-Zweig auf den Zweig 'releases/release-abc' des neuen Repos verschieben. – poke

+0

Jup das scheint den Trick zu machen, ich habe es komplizierter gemacht als es sein muss. – Jasper

+1

@poke Danke für die Freigabe, können Sie Ihren Kommentar zu beantworten. was auch anderen in der Gemeinschaft hilft. –

Antwort

1

Was Sie im Grunde tun müssen, ist ein neues zentrales Repository erstellen, die das Ziel dieser Wanderung sein wird.

Sie fügen dieses Repository dann als Remote zu jedem Ihrer individuellen Repositorys hinzu. Dann können Sie einfach mit z. git push newrepo master:releases/release-abc. Dies würde den Master-Zweig des "abc" -Repos auf den Zweig releases/release-abc des neuen Repositories verschieben.

Sobald Sie mit all Ihren individuellen Repositorys fertig sind, wird das zentrale Repository alle Änderungen in seinen Zweigen haben.

Beachten Sie, dass je nachdem, ob git-tfs das geschafft hat oder nicht, einige Commits die gleichen sein könnten, ohne die gleiche ID zu haben (ich erinnere mich nicht, ob git-tfs die Commits korrekt deterministisch rekonstruiert). In diesem Fall müssen Sie möglicherweise später bereinigen, um sicherzustellen, dass die Zweige gemeinsame Vorfahren haben. Sie können hier Rebasing verwenden, um sie wieder richtig zusammenzufügen.