zieht Dateien von einer bestimmten Revision - mercurial

8

Ich habe 3 Repositories, die jeweils mit der gleichen Codebasis erstellt wurden, aber unterschiedlich genug sind, um verschiedene Repositories zu gewährleisten. Mein "Traum" -Fluss wäre es, im Entwicklungs-Repository zu arbeiten und diese Änderungen dann in die anderen Repositories zu ziehen. Ich weiß, dass ich das mit etwas wie:

machen kann %Vor%

aber das gibt mir alle Changesets bis zu X. Ist es möglich, alle Changesets von einer bestimmten Revision oder sogar von einer Reihe von Revisionen zu ziehen?

    
mdonovan2010 17.10.2010, 17:55
quelle

3 Antworten

7

Wenn Sie den Inhalt bestimmter Changesets erfassen und auf ein beliebiges Checkout anwenden möchten (Hinweis: Die resultierenden Changesets sind verschiedene Changesets , auch wenn sie das machen gleiche Änderungen ), werfen Sie einen Blick auf die Erweiterung transplant .

    
Amber 17.10.2010, 17:59
quelle
8

Es gibt keine gute Möglichkeit, Revisionen in mercurial auszuwählen (so heißt der von Ihnen vorgeschlagene Workflow). Es gibt einige nicht so gute Möglichkeiten: Export + Import (oder der Convenience Wrapper um den Export + Import, der Transplant genannt wird), aber der Nachteil ist, dass Sie den gleichen Changeset mit verschiedenen Hashes in mehreren Repositories haben, ohne dass es gut ist Möglichkeit, das darzustellen, wenn / wenn Sie versuchen, die Änderungen erneut zu verschieben.

Besser ist es, Ihren Arbeitsablauf so zu modifizieren, dass Sie, wenn Sie über eine Änderung hinweggehen möchten, mit allen Vorfahren übergehen können, indem Sie die Vorfahren eines Changesets bewusst auswählen.

Wenn Sie beispielsweise einen Fehler im Entwicklungsrepository beheben und alle drei anderen Repositorys nicht nur die übergeordnete Version der Änderung ändern, wird tip des Entwicklungsrepositorys angezeigt. Mach zuerst eine hg update -r THE_REVISION_WHERE_THE_BUG_WAS_ADDED , behebe dann deinen Fehler und beginne dann. Sie erhalten eine Nachricht mit dem Hinweis new head created , was erwartet wird.

Nun hatten Sie dieses Update als Changesets, deren einziges Elternteil das Changeset ist, in dem der Bug eingeführt wurde - das in den 3 anderen Repositories existieren muss oder sie würden den Bug nicht haben. Nun können Sie pull das neue Changeset in die "3" anderen Repositories einfügen, ohne alles andere mit in die Entwicklung zu nehmen. Und dann machen Sie eine schnelle hg merge in jedem dieser vier Repositories, die den Bugfix in ihre deploybare tip einmischt.

Die Handhabung von Repositories mit gemeinsamen Funktionen, aber Anpassungen in jedem einzelnen, kann ein wenig schwierig sein, aber wenn Sie die Dinge richtig strukturieren, können Sie alle Ihre Intra-Repo-Migrationen mit Push, Pull und Merge durchführen. und muss nie einen Fehler zweimal beheben, denselben Code in verschiedenen Änderungssätzen haben oder die Anpassung eines Repositorys erneut durchführen.

Beachten Sie, dass der Befehl "bisect" die Frage "Wo wurde dieser Bug ausgelöst?" gut beantwortet, bevor man anfängt, sie zu reparieren.

    
Ry4an Brase 17.10.2010 21:22
quelle
7

Aktualisierte Antwort: Ab Mercurial 2 können Sie das ' Transplantat verwenden 'Befehl, der gut funktioniert. Es verwendet einige interne Zusammenführungsfunktionen, um sicherzustellen, dass Sie Konflikte manuell behandeln können. Wenn es keine Konflikte gibt, die Mercurial nicht selbst lösen kann, wird das neue Changeset automatisch über die aktuelle Revision hinaus übernommen.

    
Lstor 30.08.2012 13:21
quelle

Tags und Links