Trabajar con git en dos directorios

Buenos días, o tardes, para los que ya habéis comido.
A ver si alguno sabéis ayudarme.

En el trabajo, por temas de cliente, trabajamos con SVN. Para desplegar en PRE (y luego en PRO) tenemos que hacer el commit a la rama del cliente y ya desde el cloud de ellos hacer el despliegue, así que lo que hacemos ahora es trabajar nosotros en nuestra rama de desarrollo, luego mergear sobre trunk, y desde ella crear el patch, aplicarlo en la carpeta donde tenemos el trunk de caixa, y commit.
El caso es que quiero simplificar todo ese proceso y además, trabajar con git (usando rama develop y master, subramas para evolutivos, features para... features, etc)

El tema es, la rama de desarrollo y la del cliente tienen que estar en distintos directorios, ya que la del cliente tiene que seguir versionada con SVN, y además tiene carpetas y archivos que no están en la de desarrollo, y una estructura distinta (local está en webs/codigoproyecto/codigo, y la rama del cliente es trunk/codigoproyecto/public/codigo, además de que en la carpeta del proyecto no sólo está la carpeta public, que contiene el código, sino también otra carpeta con sqls y dos xml).

Vale, hasta aquí bien.
Lo que quiero es lo que he dicho, desarrollar tal cual hacemos ahora, pero con git, y con todo lo que ello implica, y usar SVN únicamente para los despliegues, por lo que cada uno tendremos en local nuestra carpeta del proyecto y sobre ella trabajaremos y haremos los pushes y demás que sean necesarios sobre un repositorio que crearemos, y una vez vayamos a desplegar, crear una release, y eso pasarlo al directorio de la rama del cliente y hacer el commit, y ese es el paso que no sé cómo simplificar.
Una vez creo la release, hago lo que tenga que hacer, y hago el push, quiero, de alguna forma que no sé, pasar todos esos cambios a la carpeta que corresponde, pero quiero hacerlo sencillo y limpio, no quiero ni tener que copiar los archivos a mano, ni depender de SVN ni ejecutar comandos, ya que yo no soy el único que trabaja en estos proyectos, quiero automatizar ese proceso y que sea lo más sencillo posible para todos los que trabajamos (y para mi jefe, que es el que tiene que dar el SÍ la propuesta que estoy haciendo).

¿Se os ocurro algo?

Muchas gracias y perdón por el tocho.
Cuando queráis pasar las cosas al cliente, hacéis un rebase + push a la rama clietne. En el servidor le añadís un git hook que cuando reciba un push a esta rama ejecute el git pull en otra carpeta dónde hagáis toda la movida con el SVN.

Al principio será un engorro de configurar, pero al final irá medio solo.

La otra alternativa, es tirar de servicios tipo Jenkins
@elchicosinhada Gracias.
En un principio, una de mis ideas era tirar de Jenkins, pero como he dicho, el SVN commit lo hacemos desde nuestras máquinas locales, no desde el servidor.
¿Se puede añadir un hook (he usado git "bastante" pero no he llegado nunca a eso) en cada ordenador del equipo, y que cada uno ponga el directorio donde tiene el trunk del cliente y que eso sea fácilmente portable?
Es decir, hacer yo el script que sea, y que ese script lo pueda luego añadir a otro proyecto cambiando simplemente el directorio o algún parámetro de configuración, y que luego pueda pasárselo a mi jefe o a otros compañeros y que hagan lo mismo.

Ya digo que eso nunca lo he tocado, si se puede hacer tampoco pido que me lo expliques cómo se hace, que supongo que tendrás mejores cosas que hacer, pero darme alguna idea y ya luego lo miro y y aprendo.

Muchas gracias.
Creo que puedes lanzar varios hooks, pero nunca he probado en varias máquinas ni nada.

Yo todas estas cosas siempre las hago con un Jenkins y que lo haga siempre una misma máquina.

Podrías hacer que tus compañeros hagan el commit de GIT y este lo haga jenkins «en su nombre» al SVN. Cuanto más centralices en un servidor las tareas menos tendrás que configurar en las máquinas de los demás y si quieres hacer un cambio solo tienes que tocar el servidor y no alterar el trabajo de tus compañeros.

Pero ya como veas.
elchicosinhada escribió:Creo que puedes lanzar varios hooks, pero nunca he probado en varias máquinas ni nada.

Yo todas estas cosas siempre las hago con un Jenkins y que lo haga siempre una misma máquina.

Podrías hacer que tus compañeros hagan el commit de GIT y este lo haga jenkins «en su nombre» al SVN. Cuanto más centralices en un servidor las tareas menos tendrás que configurar en las máquinas de los demás y si quieres hacer un cambio solo tienes que tocar el servidor y no alterar el trabajo de tus compañeros.

Pero ya como veas.

Entiendo, puedo estudiarlo a ver (aunque para ello tendrían que darme una máquina con git y Jenkins los del departamento de producción xD).
Y otra cosa, cuando vamos a desplegar, hay que modificar (a mano) tres archivos, a los que hay que poner la versión que se va a desplegar y demás, y eso sólo está en la rama del cliente (uno de ellos está un directorio por debajo de la raíz de cada proyecto, de ahí que haya que hacer tanto follón). ¿Podría automatizar eso también? No creo que el SourceTree (quiero usar cliente y no comandos porque como digo, no voy a trabajar sólo yo) tenga alguna opción para que al hacer commit o push en alguna rama específica te "pregunte" el número de versión o algo así, pero algo se podrá hacer ¿no?

Gracias.
¿Y por qué no automatizar también la obtención de la versión? Bajas el proyecto del cliente, les los códigos de versión, modificas tus ficheros y haces el commit.

Por otro lado, ni git ni jenkins requieren una máquina «exclusiva». Podrías usar alguna de las vuestras (la tuya por ejemplo) para que se conecten todos los compañeros. Claro que si la compilación es «tocha» te ocupará bastantes recursos cada vez que alguno vayáis a mandar la nueva versión.

Imagen
elchicosinhada escribió:¿Y por qué no automatizar también la obtención de la versión? Bajas el proyecto del cliente, les los códigos de versión, modificas tus ficheros y haces el commit.

Por otro lado, ni git ni jenkins requieren una máquina «exclusiva». Podrías usar alguna de las vuestras (la tuya por ejemplo) para que se conecten todos los compañeros. Claro que si la compilación es «tocha» te ocupará bastantes recursos cada vez que alguno vayáis a mandar la nueva versión.

Imagen

Lo primero lo pensé, además al ser un XML se podría sacar bastante fácil el número de versión, pero el caso es que tengo que mirar, a veces hay que subir el major, a veces el minor y a veces el patch. Normalmente es el patch, porque suelen ser parches (que curioso eh) pero a veces sí que se implementan cosas nuevas y subimos el minor.
Se podrían buscar mil formas, pero es algo a tener en cuenta.

Y sobre lo segundo, hay parte del equipo en Zaragoza, que es donde estoy yo, y parte en Barcelona. Y además, no pueden depender todos de un equipo, ya que yo no siempre estoy, puedo estar conectado a la VPN del cliente o no estarlo (para hacer el commit en el SVN del cliente hay que estar en una VPN y a través de un proxy).
6 respuestas