migrar git-svn commit dcommit

git svn - migrar - Combina las confirmaciones locales de Git en una confirmación para git-svn



git-svn download (6)

Actualmente, cuando ejecuto git svn dcommit git crea un commit separado en SVN para cada commit local que he hecho desde la última sincronización con SVN. ¿Existe alguna forma para que dcommit en su lugar todas mis confirmaciones locales recientes en una confirmación para SVN?


Cuando trabajo con git-svn y quiero que una serie de confirmaciones de git aparezcan como un solo compromiso, trabajo en una rama de tema y luego hago una merge avance rápido en el master antes de dcommit -ing.

Primero, vuelva a ajustar su rama contra svn y asegúrese de que el maestro local esté actualizado:

git svn rebase && git push . remotes/trunk:master

Luego cambia a master, merge y dcommit:

git checkout master git merge <branch> --no-ff -m "Message you want in svn" git svn dcommit

Esto aparecerá como un solo compromiso en Subversion, pero aún tendrá su historial local que lo llevó a ese compromiso.

+--- Merge commit V svn trunk *---*---*-------------------*--- --- --- / / topic branch *---*---*---*---*


Eso no está funcionando para mí. Uso merge --no-ff --no-commit pero después de commit, obtuve:

svntrunk 54f35e4 [trunk: ahead 336] release 1

dcommitting to trunkwill commit the 336 commit.

el reinicio, etiquetado y aplastamiento como se describe en la respuesta # 2: Combinar las confirmaciones locales de Git en una confirmación para git-svn funcionará, ¡pero en la próxima "fusión" tendrá algunos problemas para reunir todas las confirmaciones nuevamente!

el único que está trabajando para mí:

git checkout -tb svntrunk remotes/trunk git merge --no-commit --squash master

para obtener todas las confirmaciones de master a svn sin perder el historial para futuras combinaciones con el mismo comando

~ Marcel



No, pero puedes aplastar todos los compromisos con bastante facilidad. Para el siguiente ejemplo, voy a suponer que estás en la rama master correspondiente a la rama del trunk remoto y que quieres aplastar todas las confirmaciones locales juntas:

git tag local # create a temporary tag git reset --hard trunk git merge --squash local git commit # write your single commit message here git svn dcommit git tag -d local # delete the temporary tag named local

En lugar de usar una etiqueta temporal, también podría usar el reflog (es decir, usar master@{1} en lugar de local )


Una forma más simple podría ser (si tiene múltiples confirmaciones apiladas en su sistema local):

git reset <hash tag of commit till which u need to combine> git commit -am "your message" // This will create one clubbed commit of all the commit till the hash tag used.


git rebase remotes/trunk --interactive

debería llevarlo al menú donde puede seleccionar confirmaciones o aplastarlas todas en 1 confirmación para evitar contaminar su repositorio svn. This es un recurso realmente bueno (pero corto) para trabajar con git-svn.