2011-03-24 12 views
5

El propósito del plugin hg mq es poder hacer commits perfectos para su repositorio, sin confundir los cambios que hizo en su distraído TDAH inducido divagando a través de su código;¿Qué hacer cuando hay demasiados cambios en un solo parche en un hg mq la cola de parches?

Por ejemplo ....

estoy trabajando en bug x cuando noto error Y y empezar a trabajar en su lugar. En este punto, se supone que debe crear un nuevo parche en la cola de parches para no confundir los cambios cuando se haya comprometido hg qfinish en su repositorio.

Ahora suponga por un minuto que olvida hacer el nuevo parche y en el proceso hg qrefresh. Luego, al darse cuenta de su error, desea separar los cambios de ese parche en dos parches.

Me doy cuenta de que tiene que ver con la edición de su archivo de parche (y un nuevo archivo de parche) en la cola para separar los cambios en parches separados y confirmaciones posteriores. Sin embargo, aún no soy experto en la edición de los archivos de parche de diff.

¿Dónde puedo obtener información sobre esto? ¿Y cómo podría uno hacer esto?

Respuesta

0

¡Tengo un alias de shell, viq="vim $(hg root)/.hg/patches/", que utilizo para estas situaciones!

Ejecutaré viq para levantar los parches, a continuación, edita a mano el diff y muevo los trozos en otros parches, según corresponda.

Prefiero esto a través de métodos interactivos (por ejemplo, git add -i) porque no me siento tan seguro trabajando desde el indicador interactivo como lo hago trabajando desde mi editor (sé que mi editor hace copias de seguridad, tiene trucos triviales, etc ...)

+0

No lo dejé claro en mi publicación pero, sé dónde están los archivos de parches, es solo que no soy muy bueno en los detalles de la edición del archivo de parche. – leeand00

+0

Ah, lo siento, no quise sugerir que no supieras dónde están. Solo digo que, dadas todas las opciones que conozco, así es como prefiero hacerlo. –

+0

Además, mientras estés editando en el [nivel de hunk] (http://en.wikipedia.org/wiki/Diff#Unified_format), es muy fácil: puedes moverte como quieras, tan largo como el encabezado correcto (es decir, '--- a/foo \ n +++ b/foo') está en algún lugar por encima de los trozos movidos. –

3

Otra opción (suponiendo que se ejecute en su plataforma) es la versión 2.0 de TortoiseHG. La utilidad 'inapropiada' llamada Shelve permite el movimiento de fragmentos y archivos entre parches, o en el directorio de trabajo. Está disponible para Windows, Linux y posiblemente OSX.

http://tortoisehg.bitbucket.io/

2

puede activar el record extension, añadiendo a .hgrc las siguientes líneas:

[extensions] 
hgext.record = 

Puede borrar el parche actual con

hg qrefresh nothing 

(tenga en cuenta que el "nothing "es solo una cadena aleatoria: los argumentos a qrefresh es la lista de archivos que deben incluirse en la actual parche, por lo que cualquier cosa que no sea el nombre de un archivo modificado lo hará - Usualmente uso "0")

Ahora con hg qrecord <patchName> puede elegir interactivamente qué cambios deben ir en el nuevo parche. Los cambios restantes se pueden agregar a otro parche con qnew u otro qrecord. Finalmente puede usar qpop, qfold o editar .hg/patches/series para fusionar y reordenar los parches.

+0

Eso suena muy interesante ... Tendré que echarle un vistazo a eso. * ¡aplausos! * – leeand00

+1

También 'hg qcrefresh' (parte de la extensión de crecord) le permite seleccionar líneas individuales, si los parches automáticos son demasiado gruesos. –

Cuestiones relacionadas