Ein Cherry-Pick erfasst den gesamten Commit und wendet den gesamten Commit auf den aktuellen Zweig an. Wie ich Ihre Frage verstehe, wollen Sie commits nehmen, die Änderungen an mehreren Verzeichnissen vornehmen, und nur die Änderungen eines einzelnen Verzeichnisses bei jedem Commit in ein separates git-Repository aufnehmen, das nur dieses Verzeichnis enthält.
Da ein Cherry-Pick, wie ich schon sagte, den gesamten Commit ergreift, wird es nicht so, allein funktionieren.
Es sollte jedoch möglich sein, Kirschbaum zusammen mit Filterzweig zu verwenden, um dies zu erreichen.
Das erste, was zu tun ist, ist eine neue Arbeitszweig in Project 1 zu überprüfen, um keine der vorhandenen Zweige zu versauen. Ihr Arbeitszweig wird ein brennendes Wrack sein, am Ende von diesem, an welchem Punkt Sie es ruhig loswerden können; kein Schaden, kein Foul.
Einmal im neuen Arbeitszweig, verwenden Sie git filter-branch --tree-filter
, um die Commits neu zu schreiben und löschen Sie alles in der Struktur außer einem der betreffenden Verzeichnisse (Sie müssen die Umschreibung von den Eltern der commit/commits, die Sie wünschen zu migrieren, anstatt das commit/commit selbst).
An diesem Punkt werden die neugeschriebenen Commits nur die Dateien in einem einzigen Verzeichnis in Project 1 berühren (Sie enden auch mit allen anderen Verzeichnissen völlig weggeblasen, in Ihrem Arbeitszweig, aber wen interessierts). Das übergeordnete Commit umfasst das Entfernen aller anderen Verzeichnisse im Arbeitszweig, und alle folgenden Commits sind auf Änderungen im verbleibenden Verzeichnis beschränkt. An diesem Punkt sollten Sie in der Lage sein, diese Commits in das entsprechende Git-Repository für Projekt 2 zu übernehmen.
Auflösen, spülen und für jedes Verzeichnis, das Sie migrieren möchten, wiederholen.
Vielen Dank Sam für Ihre Antwort, ich teste es, aber ich arbeitete nie mit git filter-branch --tree-filter, ich habe ein Beispiel und sagen Sie Ihre Lösung: - In Projekt 1: Ich habe commit b0cefe4de84, dass Änderungen in: - Frameworks/base/LockPatternUtils.java - packages/apps/Einstellungen/security_finger_picker.xml - packages/apps/mms/SecuritySettings.java - in Projekt 2: ich habe Thesen git: - (Frameworks-Base) Frameworks/Basis - (Pakete-Apps-Einstellungen) Pakete/Anwendungen/Einstellungen/ - (Pakete-Apps-Mms) Pakete/Anwendungen/Mms – Optimmus
Nun, jetzt ist Ihre Gelegenheit zu lernen, wie Sie Zweige zu filtern . Sie sollten viele Informationen in git's Dokumentation und Google-Suchen finden. Stackoverflow ist keine Tutorial-Site. Selbst wenn dies der Fall wäre, ist ein Kommentar mit 400 Zeichen für kein Tutorial ausreichend. –
Vielen Dank für Ihre Antwort, effektiv haben Sie Recht, ich habe bereits nach Informationen in git gesucht, und ich habe diese Befehlszeile: git filter-branch --tree-filter 'rm -r! (Frameworks/base)' b0cefe4de84^..HEAD wo bleiben Rahmen/Basis und löschen Sie die restlichen Dateien in der Festschreibung, aber Sie wollen, ich habe Fehler git-filter-branch: 1: eval: Syntaxfehler: "(" Unerwartete sowieso, warum Sie "starten möchten Umschreiben von den Eltern der Commits/Commits, die Sie migrieren möchten, statt der Commit/Commits selbst). " ? – Optimmus