¿Qué hace exactamente una request de extracción en GitHub Desktop?

Disculpas si esto es demasiado básico, o un duplicado, pero estoy confundido aquí. No puedo encontrar una respuesta en la ayuda de GitHub (sí miré) y pregunté a algunos desarrolladores de software (estoy usando GitHub para almacenar documentation) ¡y ellos tampoco lo sabían!

Aquí está el escenario: tengo un repository GitHub (llámalo 'A'). Si alguien quiere hacer actualizaciones, bifurcan ese repository a uno propio (llámalo 'B'). Luego pueden hacer clic en "Clonar en el escritorio" para get una copy local.

Realizan modificaciones localmente y luego abren GitHub Desktop.

En GitHub Desktop pueden usar 'Commit to Master' y luego presionar el button 'Sync'. Esto los sincroniza con el repository B. Si lo que quieren es copyr los cambios en el repository A, van a GitHub y hacen una request de extracción. Lo entiendo.

Pero GitHub Desktop también tiene un button de "Solicitud de extracción", ¡y no entiendo a quién le está haciendo la request! ¿Es el repository A o el repository B? ¿O algo completamente diferente?

Si se trata del repository B, ¿cuál es la diferencia entre commit / sync y el button de request de extracción?

No puedo probarlo porque ese button siempre está en gris para mí (¿tal vez porque soy el propietario del repository?)

¿Y un usuario puede realizar una request de extracción directamente en el repository A desde GitHub Desktop, o será siempre un process de dos pasos a través del repository B?

El comportamiento de Solicitud de extracción será más claro si comienza a pensar en términos de twigs en lugar de repositorys . Un repository puede contener muchas twigs, y cuando crea una request de extracción, elige qué twig desea fusionar en qué otra twig.

En tu caso, parece que hay dos twigs interesantes hasta ahora:

  • A/master
  • B/master

Es decir, los repositorys A y B tienen cada uno una twig master . Cuando ve la request de extracción abierta desde el repository B al repository A , realmente se está abriendo desde la twig B/master a la twig A/master .

Sabiendo eso, de hecho, puedes abrir requestes de extracción entre cualquier twig que tenga un historial de confirmación común. Por ejemplo, si alguien creó una twig A/document_more_things e hizo algunas confirmaciones (y sincroniza, lo que en el lenguaje de Git sería un push desde su repository local A al repository remoto de GitHub A ), el repository podría verse así:

 a - b - c # master \ d - e - f # document_more_things 

Tanto las twigs master como document_more_things existen en el repository A , sin la necesidad de un repository bifurcado B , y el autor puede abrir una request de extracción de A/document_more_things a A/master . Cuando se acepta la request de extracción, el historial se verá así, con un compromiso de fusión g :

 a - b - c --------- g # master \ / d - e - f 

Si document_more_things está en A o B realidad no importa mucho, porque a Git solo le importan los commits y sus ancestries. Si B se bifurcó en la confirmación C y la def se realizó en B/master , obtendríamos la misma image después de la request de extracción de B/master a A/master como lo hicimos en A/document_more_things .

Si desea get una mejor comprensión del model de Git, hay muchos resources en línea que recomendar:

  • Try Git es un excelente tutorial interactivo a través de los commands básicos
  • Learn Git Branching es similar, con una gran visualización del estado del repository a medida que lleva a cabo acciones
  • Pro Git es prácticamente el text canónico sobre el uso de Git (además de la documentation real ), y tiene un buen capítulo sobre los conceptos básicos
  • GitHub tiene una list sólida de buenos resources