Pregunta

Cuando tengo dos sucursales en Hg repo, cómo combinar un único archivo con otra rama, sin tener todos los demás archivos de cambios mezclado?

¿Es posible fusionar sólo ciertos archivos, en lugar de todo conjunto de cambios?

¿Fue útil?

Solución

ADVERTENCIA: una "fusión ficticia" tal como se recomienda por @Martin_Geisler, puede realmente lío que hasta, si es más tarde que desea hacer una verdadera fusión de las dos ramas. La fusión ficticia se grabará, y decir que se funden en la rama que hizo la fusión ficticia a - no verá los cambios. O si se funden en la otra rama, se desharán los cambios de esa otra rama.

Si lo que quieres es copiar un archivo completo de una rama a otra, sólo tiene que 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, a continuación, "hg record" es útil.

Me acabo de hacer esto en mi directorio .hgignore.

Si ambas ramas han realizado cambios en un archivo que desea mantener, una mala pasada sería la de crear una combinación de las dos ramas usar la fusión de Hg, posiblemente / probablemente en otra rama, comprobar que en, y luego copiar un único 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: el camino a "copiar un archivo único entre las ramas" (o revisiones, o de revisión a fusionar, 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, y algunos de mis compañeros de trabajo, parece que este muy confuso. "Revertir" == "copia" ... tiene sentido para algunos patrones de uso, pero no todos.

Otros consejos

Nop. Mercurial trabaja sobre una base de cambios.

Pero se puede hacer una " fusión ficticia ", donde se ignoran los cambios entrantes de una de las ramas. Antes de comprometerse a continuación, podría revertir los archivos seleccionados a cualquier 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 le ayudará un poco.

Me acaba de utilizar una herramienta externa como vimdiff diff los dos archivos que desea combinar y luego fusionarlas. La ventaja de esto es que se puede hacer una edición selectiva de partes del archivo. Por ejemplo:

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

Para ello es necesario tener las herramientas externas en su .hgrc, que sólo significa la adición de estas líneas:

[extensions]
hgext.extdiff =  
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top