svn - heads - modelo git
¿Es posible hacer que git svn dcommit resulte en un solo svn commit? (3)
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 las revisiones múltiples de Subversion? Es decir, ¿Git fusionó todos los cambios antes de realizar la svn commit
?
El comando git rebase -i
puede hacer esto, y más. Este comando es extremadamente poderoso, por lo que es bueno hacer amistad con él.
La sintaxis es: git rebase -i <commit ID>
. Esto muestra su editor de texto, con opciones (e instrucciones) para modificar todas las confirmaciones hasta (sin incluir) la identificación dada.
Por ejemplo, para modificar las 5 confirmaciones anteriores, puede 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 aparecerá una ventana del editor de texto. Para aplastar todo, cambie la primera palabra de cada línea después de la primera, de "elegir" a "aplastar" (si esto suena confuso, tendrá más sentido cuando lo vea). Luego guarde y cierre el editor. A continuación, tendrá 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 reordenando commits, aplastando commits de diferentes maneras y eliminando commits.
Yo uso este comando constantemente; es una característica clave de Git.
Si trabajas en una rama en git, puedes hacer git-merge --squash
, que hace eso dentro de git. A continuación, puede presionar ese compromiso aplastado a SVN.
Por supuesto, muchos compromisos pequeños son buenos, entonces ¿por qué querrías aplastarlos?
Ryan Tomayko escribió un poco sobre git rebase -i
, que dijo:
... [es] un poco como cometer git --armen saltó sobre el ácido y sosteniendo una motosierra - completamente loco y bastante peligroso, pero capaz de exponer estados de ánimo completamente nuevos. Aquí puede editar, aplastar, reordenar, separar y anotar las confirmaciones existentes de una forma más fácil e intuitiva de lo que debería ser.
Tengo una tendencia a comprometerme a menudo en git, pero no necesariamente quiero comprometerme con cada compromiso de svn, y aplastar todo mi trabajo tiene el mismo sentido. Ahora estoy intentando reordenar y agrupar algunos en unidades de compromiso más lógicas.