Frage

Wenn ich zwei Zweige im Hg-Repo habe, wie kann ich dann nur eine Datei mit einem anderen Zweig zusammenführen, ohne dass alle anderen Dateien aus dem Änderungssatz zusammengeführt werden?

Ist es möglich, nur bestimmte Dateien statt des gesamten Änderungssatzes zusammenzuführen?

War es hilfreich?

Lösung

ACHTUNG: Eine solche „Dummy-merge“, wie @Martin_Geisler empfohlen wird, können Sie wirklich vermasseln, wenn Sie später eine echte Verschmelzung der beiden Zweige tun wollen. Die Dummy-merge wird aufgezeichnet, und sagen, dass Sie den Zweig verschmelzen Sie die Dummy-merge tat - Sie werden nicht die Änderungen sehen. Oder wenn Sie in den anderen Zweig zusammenführen, werden die Änderungen auf dem anderen Zweig rückgängig gemacht werden.

Wenn alles, was Sie wollen, ist eine ganze Datei von einem Ast zum anderen zu kopieren, können Sie einfach tun:

   hg update -r to-branch
   hg revert -r from-branch file
   hg ci -m 'copied single file from from-branch to to-branch

Wenn Sie verschiedene Teile der Datei auswählen möchten, dann ist "hg record" nützlich.

Ich habe gerade auf meinem Home-Verzeichnis .hgignore.

Wenn beide Zweige Änderungen an einer Datei vorgenommen haben, die Sie behalten möchten, ein schmutziger Trick, um eine Zusammenführung der beiden Zweige hg merge verwenden, möglicherweise / wahrscheinlich noch ein weiterer Zweig zu schaffen wäre, prüfen Sie, ob in und kopieren eine einzelne Datei zwischen der Zusammenführung und dem zu Zweig:

   hg update -r to-branch
   branch merge-branch
   hg merge -r from-branch
   hg ci -m 'temp merge to be discarded"
   hg update -r to-branch
   hg revert -r merge-branch single-file
   hg ci -m 'merged single-file from from-branch to to-branch"
   hg strip merge-branch

Es ist erwähnenswert: der Weg zu (oder Revisionen oder von Revision zu verschmelzen, oder ....) „eine einzelne Datei zwischen Zweigen kopieren“ ist „hg revert“. D.

   hg update -r Where-you-want-to-copy-to
   hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
   ...
   hg ci

Aus irgendeinem Grund, den ich und einige meiner Mitarbeiter, finden diese sehr verwirrend. „Zurückkehren“ == „Kopie“ ... Sinn für einige Verwendungsmuster macht, aber nicht alle.

Andere Tipps

Nein.Mercurial arbeitet auf Changeset-Basis.

Aber Sie können ein „machen“Dummy-Zusammenführung"wobei Sie die eingehenden Änderungen von einem der Zweige ignorieren.Vor dem Festschreiben können Sie ausgewählte Dateien dann in den gewünschten Zustand zurückversetzen:

% HGMERGE=internal:local hg merge     # keep my files
% hg revert --rev other-branch a.txt  # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'

Vielleicht hilft dir das ein wenig.

Ich würde nur ein externes Tool wie vimdiff verwenden Sie die beiden Dateien diff, die ich will fusionieren und dann verschmelzen. Der Vorteil ist, dass Sie eine selektive Bearbeitung auf Teile der Datei zu tun. Z. B:

hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging

Um dies zu tun, um die externen Tools in Ihrem .hgrc aktivieren müssen, das nur bedeutet diese Zeilen hinzu:

[extensions]
hgext.extdiff =  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top