Pregunta

Actualmente, cuando ejecuto git svn dcommit , git crea una confirmación separada en SVN para cada confirmación local que he hecho desde la última sincronización con SVN. ¿Hay alguna manera para que dcommit combine todas mis confirmaciones locales recientes en una confirmación para SVN?

¿Fue útil?

Solución

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. Este es un recurso realmente bueno (pero corto) para trabajar con git-svn.

Otros consejos

No, pero puedes aplastar todos los compromisos juntos con bastante facilidad. Para el siguiente ejemplo, voy a asumir que estás en la rama master correspondiente a la rama remota trunk 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 puede usar el réplica (es decir, usar master @ {1} en lugar de local )

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 sin avance rápido en 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 cambie a master, merge y dcommit:

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

Esto se mostrará como un solo compromiso en Subversion, pero todavía tendrás tu historial local que te llevó a ese compromiso.

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

Una forma más simple podría ser (si tiene múltiples confirmaciones 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.

Esto funcionó para mí: aplastó varias confirmaciones en una confirmación y luego se envió a svn:

http: //www.gitready. com / advanced / 2009/02/10 / squashing-commit-with-rebase.html

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

svntrunk                        54f35e4 [trunk: ahead 336] release 1

dcommitting to trunkfill commit the 336 commit.

restablecimiento, etiquetado y aplastamiento como se describe en la respuesta # 2: Combinar confirmaciones Git locales en una confirmación para git-svn funcionará, pero en la siguiente " combinación " ¡Tendrás algunos problemas para volver a juntar todos los compromisos!

el único que está funcionando 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top