¿Cuál es la diferencia entre Forking y Cloning en GitHub?

187

Me gustaría saber las diferencias entre hacer una bifurcación de un proyecto y hacer una clonede ellas.

¿Puedo enviar solicitudes de extracción solo a través de GitHub si he bifurcado un proyecto?

Steve Dunn
fuente
2
Posible duplicado de ¿Los tenedores git son realmente clones git?
j08691
2
Para las personas que aterrizan aquí buscando una explicación de "fork" con Git (no GitHub). No hay un comando "fork" en Git. Es más un concepto GitHub (no Git). Una distinción fácilmente olvidable.
ambassallo

Respuestas:

113

Básicamente sí. A forkes solo una solicitud para que GitHub clone el proyecto y lo registre con su nombre de usuario ; GitHub también realiza un seguimiento de la relación entre los dos repositorios, para que pueda visualizar las confirmaciones y los tirones entre los dos proyectos (y otros tenedores).

Todavía puede solicitar que la gente extraiga de su repositorio clonado, incluso si no lo usa fork, pero tendría que lidiar con hacerlo público. O envíe a los desarrolladores parches (ver git format-patch) que pueden aplicar a sus árboles.

michel-slm
fuente
44
Las bifurcaciones requieren mucho más trabajo para actualizarse que los clones. Un clon se puede actualizar con un simple git pull. Un tenedor toma múltiples comandos. Y no es sorprendente, casi todos los tenedores que miro están desactualizados. Las bifurcaciones son como el problema del repositorio de Maven en los esteroides. En lugar de un repositorio desactualizado (Maven), hay miles de ellos (Git).
jww
@jww parece que es mejor quedarse con clon, ¿por qué usar fork entonces?
serup
@serup: la razón es que la copia bifurcada se puede editar, por git pulllo que todavía existe algún tipo de relación. Si clonaste la copia completa, está en tu propia máquina local y desconectada del repositorio original.
JonH
134

Cuando dice que está bifurcando un repositorio, básicamente está creando una copia del repositorio con su ID de GitHub. El punto principal a tener en cuenta aquí es que cualquier cambio realizado en el repositorio original se reflejará en sus repositorios bifurcados (debe buscar y volver a crear la base). Sin embargo, si realiza algún cambio en su repositorio bifurcado , tendrá que crear explícitamente una solicitud de extracción en el repositorio original . Si su solicitud de extracción es aprobada por el administrador del repositorio original , sus cambios se confirmarán / fusionarán con la base de código original existente . Hasta entonces, sus cambios se reflejarán solo en la copia que bifurcó .

En breve:

El modelo Fork & Pull le permite a cualquiera bifurcar un repositorio existente e impulsar los cambios a su bifurcación personal sin que se requiera acceso al repositorio fuente. El responsable del proyecto debe extraer los cambios en el repositorio de origen.

Tenga en cuenta que después de bifurcar puede clonar su repositorio (el que está debajo de su nombre) localmente en su máquina. Realice cambios en él y empújelo a su repositorio bifurcado. Sin embargo, para reflejar sus cambios en el repositorio original, su solicitud de extracción debe ser aprobada.

Un par de otras ideas interesantes:

¿Los tenedores git son en realidad clones git?

¿Cómo actualizo un repositorio bifurcado de GitHub?

Aniket Thakur
fuente
24
"El punto principal a tener en cuenta aquí es que cualquier cambio realizado en el repositorio original se reflejará en sus repositorios bifurcados". Eso es un poco engañoso, creo. AFAIK, los cambios realizados en el repositorio original después de la bifurcación no se reflejan automáticamente en la bifurcación; tienes que mover esos cambios manualmente. Sin embargo, los cambios que ocurrieron antes de la bifurcación se copian en la nueva bifurcación cuando hace clic en el botón de la bifurcación.
Ajedi32
"cualquier cambio realizado en el repositorio original se reflejará en sus repositorios bifurcados" ... ¿en serio? No automáticamente, espero
KansaiRobot
Estaba trabajando para el proyecto de un cliente y usando clonación y modelo de inserción para el trabajo. Un día lo bifurqué e inmediatamente recibí un mensaje que decía cuál es la necesidad de bifurcar el repositorio completo. Realmente no entiendo cómo se considera eso incorrecto?
user3075740
los cambios realizados en el repositorio original después de la bifurcación no se reflejan automáticamente en la bifurcación, pero para hacerlo, consulte el paso 3 de este blog: - help.github.com/articles/fork-a-repo
Suhas Chikkanna
"cualquier cambio realizado en el repositorio original se reflejará en sus repositorios bifurcados". ¿Quiere decir que esto no es posible después de que clonemos?
variable
26
  • El proyecto bifurcado está en su repositorio en línea (repositorio).
  • El proyecto clonado está en su máquina local (generalmente clono después de bifurcar el repositorio).

Puede comprometerse en su repositorio en línea (o comprometerse en su repositorio local y luego presionar a su repositorio en línea), luego enviar una solicitud de extracción.

El gerente de proyecto puede aceptarlo para obtener sus cambios en su versión principal en línea.

Alisa
fuente
13

Un clon es donde tiene la duplicación adecuada y la separación entre dos versiones (posiblemente diferentes) de un repositorio. Cuando se modifica un repositorio, el nuevo contenido debe copiarse activamente al otro repositorio mediante un comando push. Y los cambios en el otro repositorio obtenido.

Cuando bifurca un repositorio, en un servidor, no hay necesidad de duplicar el contenido porque ambos repositorios usarán el mismo contenido [objeto fijo] del mismo servidor. El 'truco' está en administrar los diferentes puntos de vista del usuario para que cada usuario crea que tiene una copia personal completa del repositorio. Empujar y buscar entre horquillas es simplemente actualizar los punteros del usuario.

En un nivel inferior, git hace lo mismo internamente. Si tiene tres archivos diferentes, cada uno de los cuales contiene Hello World, entonces git simplemente 'bifurca' su copia única del blob Hello World y la ofrece en cada uno de los tres lugares según sea necesario.

La capacidad de bifurcar en el servidor significa que la gran asignación de almacenamiento de Github no es tan grande en promedio ya que cada cuerpo comparte el único repositorio subyacente.

Philip Oakley
fuente
5

En pocas palabras, Forking es quizás lo mismo que "clonar bajo su ID / perfil de GitHub". Un tenedor es en cualquier momento mejor que un clon, con algunas excepciones, obviamente. El repositorio bifurcado siempre se supervisa / compara con el repositorio original, a diferencia de un repositorio clonado. Eso le permite rastrear los cambios, iniciar solicitudes de extracción y también sincronizar manualmente los cambios realizados en el repositorio original con su bifurcación.

Farhan Haque
fuente
5

Si bien la respuesta de @ AniketThakur es muy buena. Nadie ha respondido la siguiente pregunta todavía.

¿Puedo enviar solicitudes de extracción solo a través de GitHub si he bifurcado un proyecto?

No. Si usted contribuye a un repositorio, puede: Crear un clon local. Haz una sucursal local. Agregar confirmaciones a esa rama. Empuje la rama local de nuevo a github (creando una rama remota en el proceso). Haga una solicitud de extracción solicitando que esa rama se fusione con la rama maestra (o la rama que desee).

Theodore Norvell
fuente
3

En caso de que haya hecho lo que el interrogador sugirió (se olvidó de bifurcar y clonó localmente un repositorio, realizó cambios y ahora necesita emitir una solicitud de extracción), puede volver a la pista:

  1. bifurcar el repositorio al que desea enviar la solicitud de extracción
  2. empuje sus cambios locales a su control remoto
  3. emitir solicitud de extracción
Princesa ruthie
fuente
2

Otra diferencia sutil extraña en GitHub es que los cambios en las horquillas no se cuentan en su registro de actividad hasta que sus cambios se incorporen al repositorio original. Además, para cambiar una bifurcación en un clon adecuado, aparentemente debes contactar al soporte de Github.

¿ Por qué mis contribuciones no aparecen ?

Cometer se hizo en un tenedor

Los compromisos realizados en una bifurcación no contarán para sus contribuciones. Para que cuenten, debe realizar una de las siguientes acciones:

Abra una solicitud de extracción para fusionar sus cambios en el repositorio principal. Para separar el tenedor y convertirlo en un repositorio independiente en GitHub, comuníquese con el Soporte de GitHub . Si la bifurcación tiene bifurcaciones propias, informe al soporte técnico si las bifurcaciones deben moverse con su repositorio a una nueva red o permanecer en la red actual. Para obtener más información, consulte " Acerca de las horquillas ".

BJennings
fuente
2

En pocas palabras, "fork" crea una copia del proyecto alojado en su propia cuenta de GitHub.

"Clone" utiliza el software git en su computadora para descargar el código fuente y el historial completo de la versión a esa computadora

Testilla
fuente