Cómo usar git cuando la progtwigción de pares

Estoy trabajando en un proyecto Apache. Estoy buscando consejos sobre la mejor manera de usar git para respaldar nuestro flujo de trabajo ligeramente inusual. Estoy familiarizado con los principales commands de git pero soy inexperto en su uso en un proyecto grupal.

En mi equipo usualmente progtwigmos un par y, por diversas razones, cambiamos la máquina del desarrollador en la que estamos trabajando varias veces al día.

El repository central del código fuente es SVN pero existe un espejo git de solo lectura.

Me gustaría que mi compañero y yo podamos retirar los commits con frecuencia de los repositorys locales de los demás y (con menor frecuencia) get actualizaciones del server y comprometernos con ellas.

Parece que esto no funcionará muy bien con "git svn", como se indica en https://www.kernel.org/pub/software/scm/git/docs/git-svn.html :

"se recomienda que todos los usuarios de git svn clonen, obtengan y comprometan directamente desde el server SVN, y eviten todas las operaciones de git clone / pull / merge / push entre los repositorys de git"

¿Cuál es la mejor manera de usar git para respaldar nuestro flujo de trabajo? Por ejemplo, ¿sería más fácil si clonamos desde el repository git de solo lectura en lugar de usar git svn, y de vez en cuando nos comprometemos con el repository svn aplicando parches a un repository 'git svn clone'-d' por separado?

Cualquier consejo recibido con gratitud.

Usamos un repository maestro en github.com y luego tenemos cuatro desarrolladores trabajando con clones locales. También nos suscribimos al uso de Git Flow para facilitar la administración de nuestras sucursales ( desarrollo, master, hotfixes, lanzamientos, funciones, etc. )

Te animamos a que leas un Modelo de ramificación de Git exitoso , utilizas un repository remoto único como tu estándar de oro ( que en realidad es un meta pensamiento en git, no existe nada parecido a un maestro como SVN ). Haga todo su desarrollo en twigs no maestras, solo tirando desde el único control remoto ( no tirando de los repositorys locales de los demás ).

Sin duda, hay una gran variedad de forms de aprovechar git en un flujo de trabajo de desarrollo. Este es uno que ha funcionado muy bien para nuestro equipo.

Entonces, ¿cómo podría verse eso en tu entorno?

Tienes un repository svn ( vamos a llamarlo svn ), has leído solo git mirror de eso, vamos a llamarlo roRepo . Sugerimos clonar el roRepo a un tercer repository remoto, vamos a llamarlo flowRepo . Luego ' git svn clone ' el repository svn a svnRepo .

flowRepo debe estar donde usted ( dev1 ) y su socio ( dev2 ), y cualquier otra persona ( devN ) se clonan. Por lo tanto, terminarías con dev1Repo y dev2Repo . Estos repos de dev nunca se jalarían o empujarían entre sí, solo tiraban / empujaban hacia flowRepo .

A partir de ahí, le recomendamos que adopte el model gitFlow, no porque proporcione magia negra, sino porque proporciona algunos controles fáciles para aprender / administrar el flujo de trabajo de desarrollo en git ( cosas como trabajar con una twig de desarrollo, usar funciones y twigs de revisión). , suelta twigs, etc. Simplemente trabajan con git-flow manejando los commands más complejos de Git detrás de la escena para usted ).

Usted y su pareja luego empujarán / flowRep para hacer flowRep regularmente durante el día. Lo más probable es que esté en la twig de desarrollo, pero si está compartiendo trabajo en una twig de características, también puede empujar / arrastrar allí en algún momento.

Como usted ( rara vez, y normalmente solo para la versión / revisión ) golpea los puntos en los que necesita volver a presionar svn, cree un parche ( es probable que desee una buena secuencia de commands para que no sea manual ) de flowRepo a se aplicará a svnRepo y finalmente se sincronizará de nuevo al repository svn .

Nuestro equipo lo hizo durante aproximadamente un año con éxito hasta que nos alejamos de SVN por completo y tuvimos una solución SCM pura de git.

¿Por qué no simplemente clonar svnRepo y omitir el flowRepo completo?

Básicamente porque está vinculado a SVN, y mientras que la bifurcación y el compromiso son baratos en GIT, tienden a ser mucho más caros en SVN.

Cuando se usa git-svn , es mejor:

  • Minimice el número de twigs que tiene que sincronizar con el repository svn
  • No esperes ver las fusiones entre twigs hechas en git publicadas en svn: no aparecerán. Solo el compromiso hecho en la (s) twig (s) git (es) que `dcommit a svn estará allí.

Ahí está el problema, porque git-flow (un model de ramificación) es ideal para crear twigs para representar el ciclo de vida de desarrollo de la aplicación (function, revisión, desarrollo, lanzamiento, etc.), que sería costoso sincronizar con svn.

Esto no quiere decir que no se puede hacer, pero con el time, creemos que tiene mucho potencial para ser, en última instancia, mucho más difícil de mantener.