2012-04-13 5 views
2

In der dunklen und fernen Vergangenheit gab es eine Entscheidung, die Kompatibilität mit einem unserer Konfigurationsprogramme zu brechen. Da es jedoch immer noch Remote-Einheiten geben würde, auf denen ältere Software läuft, mussten wir eine Version der alten mgmt-Software im Build behalten. Ein kurzer „cp -a“ später landeten wir mit einer Verzeichnisstruktur enthält:Gibt es eine Möglichkeit, Git-Commits von einem Teil meines Baumes in einen anderen zu übertragen?

mgmt-app 
mgmt-app.old 

Entwicklung fortgesetzt und mgmt-App eine Reihe von Korrekturen angesammelt, einige neue Funktionen und einige generische Funktionalität. Wie Sie wahrscheinlich erraten können, wird jetzt bemerkt, dass mgmt-app.old einige dieser Fixes nicht hat. Es wäre schön, wenn ich die relevanten Korrekturen herauspicken könnte und nützliche Dinge wie Kommentare behalten könnte, aber die Commits auf mgmt-app.old anwenden würde. Offensichtlich gelten sie nicht normal, da sie bereits in der Baumstruktur der mgmt-App enthalten sind!

Wir verwenden git zur Versionskontrolle des Repositories. Gibt es eine Möglichkeit, diese Commits an einen anderen Teil des Baumes "zurückzuportieren"? Wird das nur dadurch gelöst, dass Patches mit "patch -p" manuell angewendet werden?

+0

Sie sollten verschiedene Zweige oder sogar Repositories für diese Verzeichnisse verwendet haben, nicht nur die Daten im Repository duplizieren. Viel Glück mit Ihrem unordentlichen Repository. – KurzedMetal

+0

@KurzedMetal: Leider müssen beide Versionen der mgmt-App aus demselben System-Release erstellt werden. Dies liegt daran, dass eine gemeinsame Codebasis für die Verwaltungssoftware (die mit mehreren Geräten sprechen kann) als Systemsoftware verwendet wird (die sich natürlich nur selbst verwaltet). Eine solche Unordnung ist oft auf Kompromisse zurückzuführen, die erforderlich sind, um tatsächliche Produkte freizugeben. – stsquad

+0

Wenn ich Sie wäre, würde ich beide "mgmt" Verzeichnisse in verschiedenen Zweigen in einem Repository (um in der Lage sein, zwischen ihnen zu verschmelzen oder cherrypick) und den gemeinsamen Code in einem anderen Repo. Dann würde ich beide "mgmt" -Verzeichnisse in den gemeinsamen Code mit 'git submodule' oder umgekehrt importieren (den gemeinsamen Code in jedes' mgmt'-Verzeichnis importieren), was immer Sie brauchen. – KurzedMetal

Antwort

0

Verwenden git cherrypick

+0

Ich denke, Sie haben das Problem falsch verstanden. Dies sind Commits in der gleichen Branche. Lesen der Manpages Ich kann nicht sehen, wie man die Cherry Picks in ein neues Verzeichnis im selben Baum übersetzt. – stsquad

+0

git commits! = Diffs, wenn Sie "git commit auf eine andere Partei meines Baumes anwenden" angeben, bezieht sich das auf den Commit-Baum und nicht auf den Dateisystembaum. Das ist, was cherrypick macht, kopiere Commits von einem Teil des Commit-Baumes in einen anderen, ich denke du hast die falsche Frage gestellt. – KurzedMetal

1

Starten Sie eine neue Niederlassung für Ihre „alte“ Sachen:

git checkout -b old

gitk verwenden, durch Ihre Geschichte zurückgehen und das Recht begehen herauszufinden, bevor mgmt-app.old erstellt wurde. Identifizieren Sie die SHA1 davon begehen, und

git reset --hard <sha1>

zu Ihrem old Verzweigungspunkt dort zu machen. Jetzt haben Sie eine Verzweigung, wenn die Entwicklung divergierte, und Sie können eine interactive rebase (git rebase -i) Cherry Pick (und bearbeiten, falls erforderlich) Commits von Ihrem neuen/aktuellen Entwicklungszweig zu diesem alten machen.