Wie kombiniere ich zwei Projekte in Mercurial?

84

Ich habe zwei separate Quecksilber-Repositories. An dieser Stelle ist es sinnvoll, dass sie "eins werden", weil ich gleichzeitig an den beiden Projekten arbeiten möchte.

Ich möchte wirklich, dass die beiden Projekte jeweils ein Unterverzeichnis im neuen Repository sind.

  1. Wie füge ich die beiden Projekte zusammen?
  2. Ist das eine gute Idee oder sollte ich sie getrennt halten?

Es scheint, ich sollte in der Lage sein, von einem Repository zum anderen zu wechseln ... Vielleicht ist das wirklich einfach?

jm.
quelle

Antworten:

69

Ich konnte meine beiden Repositorys folgendermaßen kombinieren:

  1. Verwenden Sie hg clone first_repositorydiese Option, um eines der Repositorys zu klonen.
  2. Verwenden Sie hg pull -f other_repositorydiese Option , um den Code aus dem anderen Repository abzurufen.

Das -f(Force-) Flag beim Ziehen ist der Schlüssel - es heißt, die Tatsache zu ignorieren, dass die beiden Repositorys nicht aus derselben Quelle stammen.

Hier sind die Dokumente für diese Funktion.

jm.
quelle
1
Erhält dies auch die Hash-Schlüssel der Commits aus dem zweiten Repo? (Ich würde nicht raten, aber es könnte
Macke
6
Dies funktioniert, aber Sie müssen auch laufen, hg mergeum endlich alles zum Laufen zu bringen
Factor Mystic
7
@Marcus Lindblom: ein changeset ziehen wird nie, nie seinen Hash ändern. Wenn Sie danach schauen hg glog, werden Sie feststellen, dass Sie zwei nicht verwandte Zeilen von Änderungssätzen haben. Der erste Änderungssatz in jeder Zeile hat kein übergeordnetes Element, aber das ist für Mercurial kein Problem. Sobald Sie ziehen, möchten Sie einen neuen Änderungssatz für jede Zeile vornehmen, in der Sie hg mvalles in den entsprechenden Unterordner verschieben. Dann führen Sie die Zeilen zusammen und schon sind Sie fertig .
Steve Losh
1
Was ist, wenn die beiden Repositorys Code haben, der beiden gemeinsam ist? Würde das durch die Zusammenführung automatisch erledigt? und was die Zusammenführung betrifft, können wir nur sagen, $ hg zusammenführen?
Kamal
2
Zu Referenzzwecken finden Sie hier die Dokumente für diesen Prozess mercurial.selenic.com/wiki/MergingUnrelatedRepositories
Gent
7

hg begonnen haben subrepo seit 1.3 (2009-07-01). Die frühen Versionen waren unvollständig und wackelig, aber jetzt ist es ziemlich brauchbar.

Geoffrey Zheng
quelle
2
Ich habe festgestellt, dass es schwierig ist, mit Subrepos zu arbeiten. Sie funktionieren, aber Sie müssen durch einige Reifen springen, damit sie sich verhalten, und können die Ursache für viele Kopfschmerzen sein, wenn Sie nicht vorsichtig sind.
Pete Duncanson
4
Es könnte erwähnenswert sein, dass Subrepositorys offiziell ein Merkmal des letzten Auswegs sind: mercurial.selenic.com/wiki/Subrepository (Stand 2013.11.12)
jtpereyda
3

Wenn Sie in allen Projekten nicht denselben Code verwenden, halten Sie sie getrennt. Sie können Ihr persönliches Repository für jedes dieser Projekte so einstellen , dass es nur ein Verzeichnis voneinander entfernt ist. Warum alle Zweige mischen, zusammenführen und Kommentare festschreiben, wenn Sie dies nicht müssen?

Informationen zu Ihrer Bearbeitung: Von einem Repository in ein anderes verschieben. Sie können den transplantBefehl jederzeit verwenden . Obwohl all dies wirklich ein Nebeneffekt Ihres Wunsches ist , beides zu kombinieren, könnte es Ihnen unangenehm sein, meine Vorschläge zu verwenden. Dann können Sie die Walderweiterung verwenden oder so.

hg transplant -s REPOSITORY lower_rev:high_rev
Nlucaroni
quelle