what software control best version-control mercurial dvcs branching-and-merging

version control - software - Mercurial: fusionar un archivo entre sucursales en un repositorio



what is git (3)

Cuando tengo dos ramas en el repositorio de Hg, ¿cómo combinar solo un archivo con otra rama, sin tener todos los otros archivos del conjunto de cambios fusionados?

¿Es posible fusionar solo ciertos archivos, en lugar de un conjunto de cambios completo?


ADVERTENCIA: tal "combinación ficticia", como lo recomienda @Martin_Geisler, realmente puede arruinarlo, si más adelante quiere hacer una verdadera fusión de las dos ramas. La combinación ficticia se registrará, y diga que se fusiona con la rama en la que hizo la fusión ficticia: no verá los cambios. O si se fusiona con la otra rama, los cambios en esa otra rama se desharán.

Si todo lo que desea es copiar un archivo completo de una rama a otra, simplemente puede hacer:

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

Si desea seleccionar diferentes partes de ese archivo, entonces "hg record" es útil.

Acabo de hacer esto en mi directorio de inicio .hgignore.

Si ambas ramas han realizado cambios en un archivo que desea conservar, un truco sucio sería crear una combinación de las dos ramas utilizando hg merge, posiblemente / probablemente en otra rama, verifique y luego copie un solo archivo. entre la fusión y la rama a:

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

Vale la pena mencionar: la forma de "copiar un solo archivo entre sucursales" (o revisiones, o de una revisión a otra, o ...) es "hg revert". Es decir

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

Por alguna razón, yo y algunos de mis compañeros de trabajo, encontramos esto MUY confuso. "revertir" == "copiar" ... tiene sentido para algunos patrones de uso, pero no para todos.


No Mercurial trabaja sobre una base de cambios.

Pero puede hacer una " fusión ficticia " donde ignora los cambios entrantes de una de las ramas. Antes de comprometerse, puede revertir los archivos seleccionados al estado que desee:

% 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.''

Tal vez eso te ayude un poco.


Solo usaría una herramienta externa como vimdiff para diferenciar los dos archivos que quiero combinar y luego combinarlos. La ventaja de esto es que puede realizar una edición selectiva en partes del archivo. P.ej:

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

Para hacer esto necesita habilitar las herramientas externas en su .hgrc, lo que significa simplemente agregar estas líneas:

[extensions] hgext.extdiff =