Pregunta

Uso Tortoise SVN generalmente, pero he estado investigando Mercurial ya que es un sistema de control de revisión distribuido.

Lo que busco, en ambos sistemas, es una herramienta que me permite seleccionar solo partes de un archivo y enviarlas. Si quiero hacer esto ahora, tengo que copiar a una versión temporal del archivo y guardar solo los cambios que quiero confirmar en la versión actual, y luego copiar la versión temporal a la versión actual nuevamente después de confirmar. Es una molestia y el programa debería poder hacer esto por mí.

Escuché que Git apoya esto, por favor, avísame si esto es correcto.

¿Fue útil?

Solución

Mercurial puede hacer esto con la extensión .

Le pedirá cada archivo y cada fragmento de diferencia. Por ejemplo:

% hg record
diff --git a/prelim.tex b/prelim.tex
2 hunks, 4 lines changed
examine changes to 'prelim.tex'? [Ynsfdaq?]  
@@ -12,7 +12,7 @@
 \setmonofont[Scale=0.88]{Consolas}
 % missing from xunicode.sty
 \DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i}
-\else
+\else foo
 \usepackage[pdftex]{graphicx}
 \fi

record this change to 'prelim.tex'? [Ynsfdaq?]  
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file
record this change to 'prelim.tex'? [Ynsfdaq?]  n
Waiting for Emacs...

Después de la confirmación, la diferencia restante se quedará atrás:

% hg di
diff --git a/prelim.tex b/prelim.tex
--- a/prelim.tex
+++ b/prelim.tex
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file

Como alternativa, puede que le resulte más fácil usar MQ (colas mercuriales) para separar los cambios individuales en su repositorio en parches. También hay una variante de registro MQ (qrecord).

Actualización: Prueba también la crecord , que proporciona una interfaz de curses para la selección de hunk / line.

captura de pantalla de crecord

Otros consejos

Sí, git te permite hacer esto. El comando git add tiene una opción -p (o --patch ) que le permite revisar sus cambios hunk-by-hunk, seleccione qué etapa (también puede refinar los trozos o, editar los parches en su lugar). También puede usar el modo interactivo para git-add ( git add -i ) y usar " p " opción.

Aquí hay un screencast sobre la adición interactiva que también demuestra la característica de parche de git add .

Echa un vistazo a TortoiseHG, que hará una selección de trozos y te permitirá realizar diferentes cambios en un archivo como diferentes confirmaciones.

Incluso le permitirá confirmar todos los cambios en algunos archivos junto con cambios parciales en otros archivos en un solo compromiso.

http://tortoisehg.bitbucket.io/

Le pregunté a pregunta similar hace poco, y la respuesta resultante de usar La extensión hgshelve era exactamente lo que estaba buscando.

Antes de realizar una confirmación, puede colocar los cambios de diferentes archivos (o cientos de cambios dentro de un archivo) en el " estante " Y luego cometer las cosas que quieras. Luego, puede desactivar los cambios que no haya confirmado y continuar trabajando.

Lo he estado usando los últimos días y me gusta mucho. Muy fácil de visualizar y usar.

Mercurial ahora ofrece una opción --interactive (o -i ) para el comando commit , que habilita esta funcionalidad directamente desde el cuadro.

Esto funciona directamente desde la línea de comandos, por lo que es perfecto si eres un entusiasta de la línea de comandos.

En ejecución

> hg commit -i

comienza una sesión interactiva que permite examinar, editar y registrar cambios individuales para crear un compromiso.

Esto se comporta de manera muy similar a las opciones --patch y --interactive para el git add y git commit comandos.

Recomendaría no trabajar así.

Si tiene que hacer conjuntos de cambios, establezca A, que está listo para ingresar y el conjunto B que aún no está listo, ¿cómo puede estar seguro de que solo el registro en el conjunto A no interrumpirá su compilación / pruebas? Puede perder algunas líneas, olvidarse de líneas en un archivo diferente o no darse cuenta de una dependencia que A tiene de B al romper la compilación para otros.

Sus confirmaciones deben ser cambios atómicos discretos que no rompan la compilación para usted u otros en su equipo. Si está enviando un archivo parcialmente, está aumentando considerablemente las posibilidades de romper la compilación para otros sin saberlo hasta que tenga un compañero de trabajo infeliz que toca a su puerta.

La gran pregunta es, ¿por qué sientes la necesidad de trabajar de esta manera?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top