¿Es posible hacer que git svn dcommit resulte en una sola confirmación svn?


De acuerdo con el manual, git dcommit "creará una revisión en SVN para cada confirmación en git."¿Pero hay alguna manera de evitar múltiples revisiones de Subversion? Esto es, tener git merge todos los cambios antes de realizar la svn commit?

Author: plindberg, 2008-10-01

3 answers

Si trabajas en una rama en git, puedes git-merge --squash, lo que hace eso dentro de git. A continuación, podría empujar que uno squashed commit a SVN.

Por supuesto, muchos commits pequeños son buenos, así que ¿por qué querrías aplastarlos?

 34
Author: davetron5000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-10 17:47:14

El comando git rebase -i puede hacer esto y más. Este comando es extremadamente poderoso, por lo que es bueno hacer amigos con él.

La sintaxis es: git rebase -i <commit ID>. Esto trae su editor de texto, con opciones (e instrucciones) para modificar todas las confirmaciones hasta (sin incluir) el ID dado.

Por ejemplo, para modificar las 5 confirmaciones anteriores, puedes hacer esto:

git rebase -i HEAD~5

O si su rama SVN se llama "svn / trunk", entonces esta sintaxis también es buena:

git rebase -i svn/trunk

Luego a aparecerá la ventana del editor de texto. Para aplastar todo, cambie la primera palabra de cada línea después de la primera de "pick" a "squash" (si esto suena confuso, tendrá más sentido cuando lo vea). A continuación, guarde y cierre el editor. Entonces tendrás la oportunidad de editar el mensaje de confirmación para la confirmación aplastada.

Entre las otras cosas que puedes hacer con git rebase -i, están reordenar commits, aplastar commits de diferentes maneras y eliminar commits.

Uso este comando constantemente; es un característica asesina de Git.

 27
Author: andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-02 18:01:41

Ryan Tomayko escribió un poco sobre git rebase -i, que dijo:

's[es] un poco como git commit amend amend saltado en ácido y sosteniendo una motosierra – completamente loco y bastante peligroso, pero capaz de exponer estados mentales completamente nuevos. Aquí puedes editar, aplastar, reordenar, separar y anotar confirmaciones existentes de una manera más fácil e intuitiva de lo que debería ser.

Tengo una tendencia a confirmar a menudo en git, pero no necesariamente quiero dcommit cada commit a svn, y aplastar todo mi trabajo tiene igual de poco sentido. Lo estoy intentando ahora para reordenar y aplastar algunos juntos en unidades de confirmación más lógicas ahora.

 7
Author: cbowns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-13 21:00:11