git-svn: manteniendo git repo y svn repo en sincronía

Tenemos un nuevo repository git que es acrued desde un repository svn. El git repo es ahora el repository líder donde ocurrirá el desarrollo posterior. Este repository es uno alojado. El repo svn en el otro lado se mantendrá como un canal de publicación para los usuarios que no son Git. La pregunta es, ¿cómo actualizar el repository svn de vez en cuando desde el git repo? He leído mucho sobre git-svn y que uno no debería usar merge, etc. (ver ¿Es peligroso git-svn dcommit después de la fusión en git? ). Pero las fusiones ocurrirán en el git repo y no queremos restringir el desarrollo del git repo por reglas extrañas (como "solo se permite rebase").

Así que la pregunta es simple: ¿Es una buena práctica de cómo mantener un svn repo sincronizado con un git repo (digamos bisemanalmente)? Incluso es posible volver a transportar los cambios de forma segura de svn a git (en caso de que uno tenga que aplicar una corrección de emergencia al repository svn, por lo que esto ocurrirá con poca frecuencia).

Como el nuevo git repo es uno alojado, tiene que haber un repo svn-git en el medio actuando como mediador. Este repository podría usarse para "reconectar" git-merges en git-rebases, más o less. También está perfectamente bien, todas las confirmaciones intermedias de git están comprometidas con SVN como una sola gota.

Puede hacer cualquier combinación que desee en su repo de Git, siempre que no vuelva a establecer una base de la sucursal que está enviando a SVN.
Siempre que no reescriba ningún historial en esa twig, puede gestionar su flujo de trabajo de Git Repo como lo desee.

Por lo tanto, una buena práctica sería minimizar el número de sucursales en synchronization con su repository SVN, a fin de facilitar la administración de esas sucursales "públicas" ("públicas" como visibles para todos los usuarios de git y para todos los usuarios de svn).

Tengo una configuration ligeramente diferente: el repository SVN no se clona desde el repository de Git.

My Git repo tiene principalmente dos twigs: master y svn . master está sincronizado con un repository de Git simple y remoto, svn está vinculado a un repository de SVN remoto.

Aplico commits de un lado a otro usando git cherry-pick y no tengo problemas con el rebase y la fusión.

Intenté fusionar master en svn before, pero siempre terminé con sesiones interminables de resolución de conflictos. Cuando solo usas cherry-picking, la vida es mucho más fácil.

Para get svn commits en mi master , hago lo siguiente:

Primero, sincronice ambas twigs con su upstream:

 git checkout svn git svn rebase git checkout master git pull 

Entonces (mientras estás en master ):

 gitk svn 

Esto abre la window de gitk donde selecciono los commits para ser transferido de svn a master . Luego, aplico los commits a mi control remoto usando git push .

Para get los cambios de master a svn , gitk master git checkout svn y luego comienzo gitk master . Una vez más, selecciono los commits para ser transferidos y cuando git svn dcommit , git svn dcommit envía los commits al server SVN.

Simple e indoloro.