significado - mercurial tenis
Mercurial: ¿ver la lista de archivos que deben fusionarse manualmente? (4)
¿Hay un comando de Mercurial que pueda usar después de una hg pull
para ver una lista de todos los archivos que deberán fusionarse manualmente (es decir, que tienen conflictos) al realizar una hg merge
?
A menos que yo mismo lo lea mal, las respuestas anteriores no parecen abordar la pregunta que creo que se me está preguntando: tengo dos sucursales en mi repositorio que me gustaría fusionar, y quiero saber qué conflictos surgirán arriba (por ejemplo, antes de pasar por las resoluciones de conflicto una por una)
Para hacer esto, me fusionaría con la herramienta :merge3
(que intenta fusionarse automáticamente, pero deja los conflictos sin resolver) y luego uso hg resolve --list
- o simplemente mira la salida del comando merge - para ver los conflictos.
hg merge <otherbranch> --tool :merge3
hg resolve -l
Si en realidad no quiso fusionarse al final (si solo quiere ver lo que podría estar en conflicto), puede ejecutar hg update -C
luego para deshacer la fusión.
Si desea finalizar la combinación, puede ejecutar hg resolve <filepath>
para cada archivo, o simplemente hg resolve --all
para pasar por todos los conflictos que permanecen, antes de que hg commit
el conjunto de cambios de combinación.
Creo que hg status
es lo que estás buscando.
Es posible que desee leer este capítulo de Mercurial: la guía definitiva.
Puede usar la opción --rev de hg stat con un par de revisiones para ver qué diferencias de archivos existen entre los dos. Vea a continuación un ejemplo ligeramente detallado pero detallado:
Primero empezamos por hacer un nuevo repositorio:
[gkeramidas /tmp]$ hg init foo
[gkeramidas /tmp]$ cd foo
Luego agregue un solo archivo llamado foo.txt
al nuevo repositorio:
[gkeramidas /tmp/foo]$ echo foo > foo.txt
[gkeramidas /tmp/foo]$ hg commit -Am ''add foo''
adding foo.txt
[gkeramidas /tmp/foo]$ hg glog
@ 0[tip] b7ac7bd864b7 2011-01-30 18:11 -0800 gkeramidas
add foo
Ahora agregue un segundo archivo, llamado bar.txt
como revisión 1:
[gkeramidas /tmp/foo]$ echo bar > bar.txt
[gkeramidas /tmp/foo]$ hg commit -Am ''add bar''
adding bar.txt
Vuelva a la revisión 0 y agregue un tercer archivo, en un encabezado diferente. Esto se hace para simular una extracción de otra persona que haya clonado el mismo repositorio en su revisión inicial:
[gkeramidas /tmp/foo]$ hg up -C 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[gkeramidas /tmp/foo]$ echo koko > koko.txt
[gkeramidas /tmp/foo]$ hg commit -Am ''add koko''
adding koko.txt
created new head
[gkeramidas /tmp/foo]$ hg glog
@ 2[tip]:0 e5d80abdcb06 2011-01-30 18:12 -0800 gkeramidas
| add koko
|
| o 1 a2d0d0e66ce4 2011-01-30 18:12 -0800 gkeramidas
|/ add bar
|
o 0 b7ac7bd864b7 2011-01-30 18:11 -0800 gkeramidas
add foo
Ahora puede usar hg stat para ver qué diferencias de archivos existen entre cualquier par de revisiones, por ejemplo, los cambios de rev 0 a rev 1 agregaron ''bar.txt'' a la lista de archivos:
[gkeramidas /tmp/foo]$ hg stat --rev 0:1
A bar.txt
Los cambios de rev 0 a rev2 agregaron ''koko.txt'' a la lista de archivos:
[gkeramidas /tmp/foo]$ hg stat --rev 0:2
A koko.txt
Pero lo más interesante es que los cambios de rev 1 a rev 2 implican dos cambios de manifiesto de archivo. (1) ''koko.txt'' se agregó en la versión 2, y (2) ''bar.txt'' existe en la versión 1 pero falta en la versión 2, por lo que se muestra como un archivo ''eliminado'':
[gkeramidas /tmp/foo]$ hg stat --rev 1:2
A koko.txt
R bar.txt
hg resolve --list
De la documentation :
Las fusiones con conflictos no resueltos son a menudo el resultado de una fusión no interactiva utilizando la configuración de configuración interna: combinación, o una herramienta de combinación de línea de comandos como diff3. El comando de resolución se utiliza para administrar los archivos involucrados en una fusión, después de que se haya ejecutado hg merge, y antes de que se ejecute hg commit (es decir, el directorio de trabajo debe tener dos padres).
Edición 5 de enero de 2012:
(Recibí un voto positivo para esta respuesta hoy, así que lo revisé nuevamente. Descubrí que no entendí la pregunta).
La pregunta es "He realizado una extracción desde un repositorio remoto y todavía no he realizado una combinación. ¿Puedo ver qué conflictos se crearán al realizar la combinación?"
Mi respuesta anterior es claramente incorrecta. Después de leer la documentación vinculada, no creo que haya un método incorporado para hacer esto. Sin embargo, hay una manera de hacerlo sin arruinar el árbol de origen de trabajo.
Supongamos que ha clonado el repositorio A de alguna fuente remota al repositorio B en su sistema local, es decir, hg clone http://hg.example.com/AB
. Después de hacerlo, realiza cambios en su repositorio local, B , que involucra al menos un compromiso. Mientras tanto, se han realizado cambios en el repositorio A para que cuando haga una extracción, reciba un mensaje que indique que se han agregado nuevos conjuntos de cambios y se han creado jefes.
En este punto, puede hacer hg heads
para enumerar los dos conjuntos de cambios que estarán involucrados en una combinación. A partir de esta información, puede emitir un comando de estado para enumerar las diferencias entre los jefes. Suponiendo que los números de revisión en su repositorio B , según la lista de jefes, son "1" y "2", entonces puede hacer el hg status --rev 1:2
para ver una lista de los cambios.
Por supuesto, esto realmente no le dice si ocurrirán conflictos cuando haga una fusión. Como no hay un comando que le muestre esto, tendrá que "previsualizar" la fusión clonando en un nuevo repositorio y haciendo la fusión allí. Entonces, hg clone BC && cd C && hg merge
. Si está satisfecho con el resultado de esta combinación, puede hacer hg com -m ''Merging complete'' && hg push && cd ../ && rm -rf C
Es un poco un proceso, pero mantiene limpio el árbol de origen actual si la fusión resulta ser un desastre. También puede encontrar útil esta descripción de trabajar con repositorios públicos.