-git svn tenía un problema grave relacionado con compromete palmitas:
Suponga que tiene cometer a1b2c3f9 que ya está dcommitted en el repositorio SVN:
$ git show a1b2c3f9
commit a1b2c3f9...
Author: Happy Dev <[email protected]>
Date: Mon Nov 14 13:01:38 2011 +0000
Commit message
git-svn-id: https://host/svn/branches/[email protected] 43fe5c0-...
Ver este git-svn-id línea? Así es como git-svn entiende dónde se encuentra su confirmación en el repositorio de Subversion.
ahora quiere cereza-escoge esta confirmación a principal rama en la que está actualmente en:
$ git cherry-pick a1b2c3f9
Si no hay conflictos de fusión, git crea un nuevo compromiso, por ejemplo, 9f3c2b1a y aquí lo que tenemos:
$ git show 9f3c2b1a
commit 9f3c2b1a...
Author: Happy Dev <[email protected]>
Date: Mon Nov 14 13:01:39 2011 +0000
Commit message
git-svn-id: https://host/svn/branches/[email protected] 43fe5c0-...
Entonces, Git creó una confirmación con exactamente el mismo mensaje. Esto causó serios problemas. Las versiones anteriores de git-svn enviaron dicha confirmación a la rama incorrecta - ^/branches/some-branch en lugar de ^/trunk/.
Este problema ya está solucionado en las últimas versiones de Git. Pero hay otro que todavía está presente:
git-svn no respeta el mecanismo de seguimiento de fusión de Subversion.
que Subversion se fusionan información sobre cherry-picks realizados, por lo que el comando
$ svn merge -c 1000 ^/branches/some-branch trunk-working-copy
ajusta el SVN : mergeinfo propiedad de tronco-copia de trabajo de la siguiente manera:
+ /branches/some-branch: 1000
De esta forma, Subversion entiende que esta revisión en particular ya estaba fusionada en la rama ^/trunk/ por lo que se salta este chang e en otras fusiones.
Cuando se ejecuta git cherry-pick
y luego git svn dcommit
depósito de la subversión no consigue SVN: mergeinfo modificación.
Aquí va el descargo de responsabilidad:
Actualmente no trabajo en SmartGit pero trabajo en un estrecho contacto con los desarrolladores SmartGit.
Syntevo compañía desarrolló SmartGit - un gran reemplazo de git-svn. Este cliente Git resuelve todos los problemas que he descrito más arriba:
Por lo tanto, cereza-escoge a1b2c3f9 comprometen:
$ git cherry-pick a1b2c3f9
como resultado que se obtiene 9f3c2b1a confirmación, y luego lo empuja hacia Repositorio Subversion. SmartGit hace todo lo posible para mantener la información de registro de fusiones, por lo ^/trunk/ rama obtiene necesaria modificación de su SVN: mergeinfo propiedad:
+ /branches/some-branch: 1000
Se podrá realizar Git cereza recoger ya sea de sí mismo o mediante SmartGit Interfaz de línea de comando de Git. En el segundo caso, el mensaje de confirmación debe tener git-svn-id línea de la fuente de selección de cereza.
SmartGit es un software propietario, pero es gratuito para uso no comercial. Tiene muchas funciones excelentes, para obtener más información, consulte SmartGit documentation.
Hay otro proyecto interesante que resuelve ciertos problemas con git-svn - SubGit. Básicamente es la solución del lado del servidor para sincronizar los cambios entre los repositorios Subversion y Git. Es mucho más superior que git-svn y no tiene problemas.
Como usuario de svn-via-git, creo que a usted también le puede interesar.
Uso TortoiseSVN, así que no estoy seguro de cómo lo haría en la línea de comandos, pero recomendaría hacer lo que en Tortoise se conoce como Grabar la fusión, donde actualiza Mergeinfo, pero no crea ningún cambios reales en la confirmación. En teoría, esto evitaría más problemas si otras personas se fusionan dentro del contexto SVN, ya que esas revisiones ya se han "fusionado" y podrían causar un conflicto falso. –