git - migrar - crucible atlassian
¿Puedo comprometer solo partes de mi código usando SVN o Mercurial? (6)
Yo uso Tortoise SVN habitualmente, pero he estado investigando a Mercurial ya que es un sistema de control de revisión distribuido.
Lo que estoy buscando, en ambos sistemas, es una herramienta que me permite elegir solo partes de un archivo y confirmarlas. Si quiero hacer esto ahora, tengo que copiar a una versión temporal del archivo y mantener solo los cambios que deseo 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íseme si esto es correcto.
Echa un vistazo a TortoiseHG, que hará la selección de trozos y te permitirá confirmar diferentes cambios en un archivo en cuanto a las diferentes confirmaciones.
Incluso le permitirá realizar todos los cambios en algunos archivos junto con cambios parciales a otros archivos en una confirmación.
Hace un momento hice una pregunta similar y la respuesta resultante de usar la extensión hgshelve era exactamente lo que estaba buscando.
Antes de realizar una confirmación, puede poner cambios de diferentes archivos (o un montón de cambios dentro de un archivo) en el "estante" y luego confirmar las cosas que desea. Luego puede desmantelar los cambios que no cometió y continuar trabajando.
Lo he estado usando en los últimos días y me gusta mucho. Muy fácil de visualizar y usar
Mercurial ahora proporciona una opción --interactive
(o -i
) para el comando de commit
, que habilita esta funcionalidad desde el primer momento.
Esto funciona directamente desde la línea de comandos, ¡así que es perfecto si eres un entusiasta de la línea de comandos!
Corriendo
> hg commit -i
comienza una sesión interactiva que permite examinar, editar y registrar cambios individuales para crear una confirmación.
Esto se comporta de manera muy similar a las opciones --patch
y --interactive
para los comandos git add
y git commit
.
Mercurial puede hacer esto con la extensión de record .
Te pedirá cada archivo y cada trozo 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 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
Alternativamente, puede resultarle más fácil utilizar MQ (Colas Mercuriales) para separar los cambios individuales en su repositorio en parches. También hay una variante MQ de registro (qrecord).
Actualización: Pruebe también la extensión de crecord , que proporciona una interfaz de curses para la selección de hunk / line.
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, seleccionar qué escenario (también puede refinar los trozos o editar los parches en su lugar). También puede usar el modo interactivo para agregar git add -i
( git add -i
) y usar la opción "p".
Aquí hay un screencast sobre la adición interactiva que también muestra la función de parche de git add
.
Yo recomendaría no trabajar así.
Si tiene que realizar un conjunto de cambios, configure A que esté listo para registrar y configure B, que aún no está listo, ¿cómo puede estar seguro de que solo revisar el conjunto A no romperá su construcción / pruebas? Puede omitir algunas líneas, olvidarse de las líneas en un archivo diferente o no darse cuenta de una dependencia que A tiene en B rompiendo la construcción para otros.
Tus compromisos deben ser cambios atómicos discretos que no rompan la construcción para ti o para otros en tu equipo. Si está cometiendo parcialmente un archivo, está aumentando las posibilidades de que rompa la construcción para otros sin saberlo hasta que un colega infeliz llame a su puerta.
La gran pregunta es, ¿por qué sientes la necesidad de trabajar de esta manera?