Mi flujo de trabajo típico git-svn es:¿Por qué git-svn dcommit deja commits duplicados en mi git repo? ¿Puedo detenerlo haciendo eso?
git checkout -b story-xyz
git commit -a -m "work"
git commit -a -m "more work"
git checkout master
git svn fetch
git merge remotes/trunk
git checkout story-xyz
git rebase master (sometimes with -i)
git checkout master
git merge story-xyz
En este punto tengo mi master
y story-xyz
ramas apuntando a la misma confirmación, uno o más comete por delante de remotes/trunk
. Todo desde remotes/trunk
está en una historia lineal.
last svn commit [remotes/trunk] <--- work <--- more work [master, story-xyz]
entonces corro
git svn dcommit
esperaba ver las confirmaciones entre remotes/trunk
y master
revisiones Subversion convertido, y terminar con una sola historia lineal con remotes/trunk
, master
y story-xyz
todos apuntando a la última revisión, así:
last svn commit <--- work <--- more work [master, story-xyz, remotes/trunk]
Mis revisiones de Subversion entran bien, pero termino con una estructura de dos ramas. La raíz común de la rama es Subversion HEAD antes de comprometerme. Ambas ramas contienen la misma serie de confirmaciones, en el sentido de que contienen las mismas diferencias. La rama story-xyz
está a la cabeza de una rama, remotes/trunk
y master
en el otro:
last svn commit <--- work <--- more work [master, remotes/trunk]
|
\- work <--- more work [story-xyz]
El confirmaciones Git que tenía antes de ejecutar git svn dcommit
están en la rama inferior (story-xyz
), con mi git commit mensajes, git nombre de usuario y correo electrónico, y git commit timestamps. Los commits en la rama superior son nuevos commits de git. Usan mi nombre de usuario de Subversion, la marca de tiempo cuando ejecuté el dcommit
, y los mensajes de confirmación tienen el campo git-svn-id
adjunto a ellos.
Todo está bien, y puedo seguir trabajando. El problema es que miro en gitk
y veo lo que parece una rama no fusionada story-xyz
. Es bastante difícil distinguir la diferencia entre una rama de historia que he fusionado de nuevo en master
, y una que no tengo. La forma más obvia de detectarlo son los mensajes de confirmación duplicados. Podría eliminar la rama story-xyz
, pero parece que no estoy usando git correctamente y he perdido parte de mi historial.
¿Me falta algo que podría detener git-svn
de hacer esto? ¿O es solo una de las formas en que la interacción con Subversion diluye el poder y la libertad de git?
Gracias, intentaré esto hoy.Parece que esto eliminará por completo la necesidad de maestro, por lo que tiene la intención de que la historia de los controles remotos/troncales sea ahora nuestra "línea principal" de la historia. –
El historial de controles remotos/troncales es la "línea principal" también en su caso. Mira tu último gráfico. La historia de master es la misma que la historia de remotes/trunk. Ambos son igualmente válidos como "línea principal": remotos aún más, porque es la línea principal _shared_. No tiene que eliminar el maestro por completo. Puedes dejarlo colgando en algún punto anterior de la historia. Luego, si necesita hacerlo, p. one commit, puedes pagar master y svn rebaselo hasta el día de hoy. –
Sí, eso tiene sentido. Supongo que estaba demasiado atada a la idea de que 'maestro' fuera tan especial que teníamos que mantenerlo actualizado. Todavía no he tenido la oportunidad de probar tu flujo de trabajo, pero si funciona como esperaba, aceptaré la respuesta. –