2010-01-06 27 views
13

¿Puedo establecer ganchos para "tirar"/"empujar" desde/a un repositorio gestionado git-svn?Ganchos para git-svn

La situación es que tengo un host de proyecto en Google Code, y uso git para administrar la copia de trabajo local. Quiero establecer algunos enganches para que cuando ingrese/salga datos desde/hacia el repositorio SVN con git svn fetch y git svn dcommit, puedo modificar el compromiso. Como no albergo el repositorio SVN, no puedo establecer ganchos en el lado del servidor.

¿Hay algún gancho que pueda usar? ¿O hay una manera de "marcar" una rama ordinaria, de modo que git pull y git push en esa rama registrarán su entrada/salida desde/hacia un repositorio SVN, por lo tanto, podrían utilizarse los ganchos de git normales?

Gracias de antemano.

Respuesta

9

Como se ilustra en this thread, puede tener ganchos en el lado de Subversion que realmente pueden rechazar su git svn dcommit según algunos criterios.

Pero si necesita ganchos git en el lado Git, le recomendaría configurar un intermedio bare Git repository (desnudo para facilitar el empuje/extracción).
En esa cesión temporal al descubierto, usted puede tener cualquier gancho que necesita, como se muestra en "how do I deploy multiple branches to different directories via git push?" (no se trata de SVN, pero sólo aquí al detalle una configuración similar de una cesión temporal adicional)

  • si el repositorio intermedio validar su presionar, podría disparar el git svn dcommit.
  • también puede, en una solicitud git fetch, disparar un git svn fetch y validarlo, antes de permitir su propio git fetch para avanzar.

(2 años después)

David Souther propone una solución en his blog (abril de 2012)

La solución que tengo es tener un repositorio con los jefes de división. La mayoría de las veces, el repositorio intermedio tendrá un directorio de trabajo vacío. Cuando ocurre un empujón, verificará el maestro, verificará la construcción y presionará svn antes de volver a la rama vacía.

Vamos a configurar un repositorio git intermedio con dos ramas.

  • maestro todavía apuntará al repositorio SVN,
  • y la nueva rama stage nos permitirán mantener el directorio de trabajo limpio y en sincronía con los cambios descendentes.

Salida his gist.

+0

Brilliant! Un repositorio intermedio resolverá mi problema. Pero me gustaría mantener la pregunta abierta durante unos días para ver si hay una solución más elegante :) – iamamac

+0

@lamamac: absolutamente. Para eso es una recompensa;) – VonC

+0

"también puede, en una solicitud de recuperación de git, activar un git svn fetch y validarlo" - ¿Qué gancho usarías para esto? - No puedo ver nada obvio en githooks que pudiera se activará en el servidor cuando el cliente intente tirar. – Greg

0

Hay un git-remote-cvs remote helper en proceso; presumiblemente alguien hará lo mismo por svn. Los ganchos normales para operaciones remotas deben invocarse antes y después de llamar a estos ayudantes.

3

https://github.com/hkjels/.dotfiles/blob/master/zsh/git-svn.zsh

Si utiliza zsh, creo que este es un buen compañero para git-svn. Simplemente ponga sus ganchos en .git/hooks y prefija el comando con svn-.

Por ejemplo, ".git/ganchos/post-SVN-rebase"

El script también permite el uso de alias

+0

Alguien hizo esta versión bash basada en este script zsh aquí: https://github.com/rkitover/git-svn-hooks – tutuDajuju