La mejor práctica de flujo de trabajo con git y github?

He estado usando git y github con mi pequeño equipo de desarrolladores para nuestros proyectos. No puedo evitar pensar que no lo estamos haciendo bien. Me interesa escuchar cómo otros usan este flujo de trabajo dentro de sus proyectos.

Cómo lo usamos: Nos ramificamos antes de cada cambio, nos fusionamos con el maestro, nos comprometemos localmente y presionamos a nuestro repository github. Luego entramos en nuestro entorno de testing y sacamos la twig principal del repository github. Todavía no hemos comprendido el rebase , el fetch o el tagging .

Cómo me gustaría usarlo: me gustaría poder ingresar a los diferentes serveres y get una versión labelda específica, como "fase 1" en el server. ¿Es esto posible, o necesitaría dos repositorys github diferentes?

¿Se supone que debes convertir una twig específica en los serveres web o crear un nuevo alias para git push a git push ?

¿Se puede controlar la liberación de candidatos o entornos (testing, desarrollo, producción) dentro de un repository de git? o necesitas múltiples?

Si tirar es la solución, ¿puedes sacar una tag específica?

Básicamente, puede funcionar muy bien con un repository "central" de GitHub.

  • Las tags que son pointers inmutables, se pueden usar (y empujar) en cualquier momento, para que puedan ser revisados ​​en cualquier entorno de testing o producción. Eso permite que se lleve a cabo cierta validation, pero por lo general no sirve para el desarrollo.
  • Tirando de una twig significa que puede hacer algunas evoluciones dentro de esa twig (debido a algunas correcciones y ajustes para hacer una vez que el código está en un entorno de producción) y empujarlo hacia atrás para el rest del repository del desarrollador para que ellos retrocedan y tengan en count.

Por lo tanto, depende de lo que esté haciendo en esos serveres: solo validation (con un estado aceptado o rechazado), o también desarrollos posteriores.
En todos los casos, una label con una convención de nomenclatura apropiada es útil para realizar un seguimiento de las confirmaciones específicas en el historial, pero las twigs son necesarias cada vez que necesita aislar un esfuerzo de desarrollo.

Lee el libro de Pro Git . Puedes leer páginas de git man durante un año y todavía no lo entiendes: intentar aprender git leyendo páginas man es como tratar de aprender un nuevo idioma leyendo un dictionary, se puede hacer. El libro le enseñará un puñado de flujos de trabajo que puede tener con git, y qué commands de git usar y en qué context usarlos.

En GitHub, utilizo una count para mi empresa, que es donde vive el código "bendito"; Luego mantengo un fork personal, donde trabajo en cosas que aún no son del todo estables. En mi máquina local, manejo ambos en un repository, de modo que el maestro es el código bendito (y lo empuja a la count de la empresa), mientras que todas las otras twigs son para mi tenedor. Aquí hay parte de mi .git / config:

 [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = [email protected]:xiongchiamiov/fourU.git [branch "hacking"] remote = origin merge = refs/heads/hacking [branch "editor"] remote = origin merge = refs/heads/editor [branch "problem-utils"] remote = origin merge = refs/heads/problem-utils [branch "tests"] remote = origin merge = refs/heads/tests [remote "trunk"] fetch = +refs/heads/*:refs/remotes/trunk/* url = [email protected]:xyztextbooks/fourU.git [branch "master"] remote = trunk merge = refs/heads/master 

Como tengo permissions de confirmación para el repository de la empresa, puedo unir (o seleccionar) las confirmaciones de una twig a otra, y llevarla a la location adecuada. Ahora, los repos separados no son necesarios, pero como este es un proyecto de código abierto, me gusta mantener el repository "oficial" libre de twigs creadas por mis tangentes. Una vez que alcanza el punto donde obtendrá el control de versiones, habrá una twig 0.x, con tags para cada versión (0.1, 0.1.1, 0.2, etc.), lo cual es particularmente ventajoso porque github crea automáticamente los files de tar de los files. en cada label, muy adecuado para bajar una versión específica a una máquina que no necesita el historial completo.

Deberías leer el blog github; Han tenido algunas buenas publicaciones que describen su flujo de trabajo de implementación, que por supuesto implica git.