Mercurial:Zusammenführen einer Datei zwischen Zweigen in einem Repo
-
21-08-2019 - |
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?
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 =