La mejor práctica para Pull Requests en GitHub

He leído esto y estas discusiones, pero todavía tengo problemas para entender la mejor manera de queueborar en GitHub.

Supongamos que he bifurcado un informe y lo desarrollo de forma independiente (el repository original no ha estado activo durante un time). Así que tengo mi propia twig de develop , donde hago todos los cambios: ramificándolos desde la feature , desarrollándolos allí y luego fusionándolos para develop . De vez en cuando quiero enviar un RP al repository original. Pero no puedo hacer relaciones públicas desde la feature , ya que includeá toda la historia de develop . Entonces eso es lo que hago:

  • master pago que rastrea el repository original
  • brahnch de ella
  • escoge la feature y presiónala en GitHub
  • enviar un PR

Cuando esas relaciones públicas se combinan para master repository original, saco de él y luego fusiono el master para develop .

Funciona bastante bien, pero da como resultado la multiplicación de confirmaciones idénticas en mi propio repository, así que no estoy seguro si la selección de cerezas es la mejor manera aquí.

La ramificación del master sería quizás mejor, pero a menudo hay una situación en la que he hecho la function-2 que depende de la característica-1; y feature-1 aún espera que se fusione PR, pero aún no está en el master .

Agradecería cualquier sugerencia y ejemplos.

En teoría, siempre depende del proyecto en el que está trabajando y del jefe del proyecto.

En general, solo te comprometes a dominar cuando se trata de una compilation de lanzamiento, o algo que al less se puede comstackr sin errores. Pero algún proyecto simplemente lo arroja todo al maestro.

Verdaderamente, en mis propios proyectos y opiniones, sus requestes de extracción deberían ubicarse en la twig principal de desarrollo de proyectos, luego, cuando llegue el momento, todo desde el desarrollo se fusionará en maestro .

Su flujo de trabajo básicamente se mantendría igual. Branch from develop para crear una nueva característica-X , comprometerse con feature-X , y luego enviar una request de extracción en feature-X . Una vez que se fusionó en el desarrollo, lo networkinguciría y continuaría trabajando; o simplemente combínalo en tu bifurcación personal y continúa trabajando, debe entenderlo. Una vez que el líder del proyecto siente que el proyecto está en su próxima versión, él / ella se fusionaría para convertirse en maestro.

Eche un vistazo a esta lectura de 5 minutos: Comprender el flujo de GitHub .

Estoy de acuerdo con Ryen en que depende de qué proyecto.

En mi trabajo, hemos creado un sistema bastante agradable con el que todos estuvimos de acuerdo.

  1. Comience en el último maestro.
  2. Trabaja en tu trabajo de desarrollo o function
  3. git add -p (para sus cambios) o git add para nuevas adiciones
  4. git checkout -b new-branch-name
  5. git commit -m "lo que sientas que se debe decir"
  6. git pull -r master de origen
  7. git push origin new-branch-name
  8. abra una pr y espere 2 aprobaciones
  9. fusionarse en maestro
  10. eliminar nombre-nueva-twig

Después de eso, simplemente volvemos al maestro y repetimos. Si alguien solicita cambios, ocultamos lo que estamos trabajando y comprobamos el nombre de la nueva twig, hacemos los cambios solicitados, hacemos un git pull -r master de origen otra vez, luego git push -f origen new-branch-name, luego checkout master y git stash pop. A veces te encuentras en un punto donde necesitas los cambios que hiciste, en ese caso simplemente continuamos trabajando en ese nombre de nueva twig y no lo borramos localmente, solo en github o lo que sea que uses.

Sé que rompí el estilo de Barney, pero no quería perderme nada. Sientase libre de usarlo. También funciona muy bien para nosotros porque hablamos y queueboramos mucho. En cuanto a los repositorys y repositorys bifurcados, solo abre una count cuando estés contento con lo que has estado trabajando. No estoy totalmente de acuerdo con todo el asunto, ramificándome de maestro a una twig de desarrollo, y luego me desvío de eso. El maestro debe estar listo para usar en todo momento y luego, si te apegas a esas reglas, no debes preocuparte. Además, si le teme a una gran empresa, no dude en solicitar que varias personas la revisen, y no tiene por qué ser solo dos. Solo tenemos 6 personas, así que 2 trabajan para nosotros. Espero que ayude.

Dado el comentario publicado por OP sobre la respuesta de Ryen Nelsen:

… dominar / desarrollar la separación no es realmente un problema, generalmente sigo el paradigma de gitflow. Lo que me interesa, ¿cómo enviar request de extracción solo para feature-X, dado que mi desarrollo está muy por delante del repository original? Uso cherry-picking, pero ¿es la mejor manera?

Preguntaré: ¿qué quiere decir con que su twig de develop está muy por delante del repository original (a partir de ahora lo llamaré twig master )? ¿Cuáles son todas las otras cosas en su twig de develop ?

Parece que estás completando un desarrollo significativo en el develop que no va a ser master en el corto ploop. En esta situación, cree una twig de características por separado para cada request de extracción / problema / mejora en la que esté trabajando que se enviará al master .

Si tiene cuidado, puede minimizar las diferencias entre sus diversas twigs de características, incluidas las interdependencies discutidas en la cita. Por ejemplo, supongamos que está manteniendo develop e intentando enviar requestes de extracción al master para fea1 y fea2 .

  • Configure las 2 twigs de funciones fuera de master y Cherry-pick o Rebase fuera de develop para fea1 y fea2 hasta que tengan la base que necesita de los cambios de develop existentes para realizar las correcciones.
  • Si hay interdependencies, eso significa que seleccionará algunas de las mismas confirmaciones para cada twig de características, o terminará desarrollando un nuevo código que se fusionará o se volverá a establecer entre las dos twigs de características.
  • Desarrolla las nuevas correcciones para fea1 y fea2 , y fusiona (o rebase / squash) para develop según lo consideres apropiado. Fusionarse en este context, donde usted es el único que se está desarrollando en este repository, es simple: solo estará trabajando en uno de develop , fea1 o fea2 a la vez, por lo que fusionarse realmente va a ser manejar conflictos que usted tiene que resolver de todos modos …

Una vez que esté preparado para las requestes de extracción, puede dejar fea1 y fea2 en sus propias sucursales separadas, y continuar trabajando en develop separado. Mientras tanto, cuando las Solicitudes de fea1 obtengan comentarios, siempre puede fea1 o fea2 y actualizarlos, tal vez requiera una fusión de fea1 a fea2 o viceversa, y probablemente también necesite fusionar las nuevas confirmaciones para desarrollarlas de modo que permanezcan. A hoy.

Una vez que se acepten los RP, puede limpiar todo lo que necesite en la correspondiente twig de entidades privadas en su repository, y asegurarse de que las fusiones finales con la otra sucursal y su develop estén completas.

Luego podría eliminar la twig de características, pero personalmente, labelría el último compromiso para poder volver a hacerlo en el futuro si fuera necesario y luego eliminar la reference de la sucursal. De esta forma, puedes volver a un compromiso que probablemente esté mucho más cerca de ser master que develop , aunque dependiendo de cuánto time haya transcurrido, tal vez no, al less podrás elegir. Esto podría suceder, por ejemplo, si un defecto en su RP se convierte en master, y se abre un nuevo problema que puede networkingucirse rápidamente, pero que le tomaría a alguien mucho más time.