Sigo escuchando a la gente decir que están bifurcando código en Git. El "tenedor" de Git suena sospechosamente como el "clon" de Git más alguna disposición psicológica (sin sentido) para renunciar a futuras fusiones. No hay un comando fork en Git, ¿verdad?
GitHub hace que los tenedores sean un poco más reales al grapar la correspondencia en él. Es decir, presiona el botón de la horquilla y luego, cuando presiona el botón de solicitud de extracción, el sistema es lo suficientemente inteligente como para enviar un correo electrónico al propietario. Por lo tanto, es un poco un baile en torno a la propiedad y los permisos del repositorio.
¿Sí No? ¿Alguna angustia por GitHub extendiendo Git en esta dirección? ¿O hay rumores de que Git absorbe la funcionalidad?
--reference
usado. No está claro exactamente cómo se manejan los repositorios públicos y las eliminaciones (mover alternativas al repositorio promocionado elegido al azar? Señalar todos los tenedores a alguna alternativa común que no sea parte de la bifurcación original?), Pero el uso de alternativas explica varios comportamientos observables.Respuestas:
Fork , en el contexto de GitHub, no extiende Git.
Solo permite clonar en el lado del servidor.
Cuando clona un repositorio de GitHub en su estación de trabajo local, no puede contribuir de nuevo al repositorio ascendente a menos que sea declarado explícitamente como "colaborador". Eso es porque su clon es una instancia separada de ese proyecto. Si desea contribuir al proyecto, puede usar la bifurcación para hacerlo, de la siguiente manera:
Consulte también " Flujo de trabajo colaborativo de GitHub ".
Si desea mantener un enlace con el repositorio original (también llamado ascendente), debe agregar un control remoto que haga referencia a ese repositorio original.
Consulte " ¿Cuál es la diferencia entre origen y upstream en GitHub? "
Y con Git 2.20 (Q4 2018) y más, la búsqueda desde fork es más eficiente, con islas delta .
fuente
"Forking" es un concepto, no un comando específicamente compatible con cualquier sistema de control de versiones.
La bifurcación más simple es sinónimo de ramificación. Cada vez que crea una rama, independientemente de su VCS, se "bifurca". Estas horquillas suelen ser bastante fáciles de fusionar.
El tipo de bifurcación del que estás hablando, donde una parte separada toma una copia completa del código y se va, necesariamente ocurre fuera del VCS en un sistema centralizado como Subversion. Un VCS distribuido como Git tiene un soporte mucho mejor para bifurcar toda la base de código y comenzar efectivamente un nuevo proyecto.
Git (no GitHub) admite de forma nativa "bifurcar" un repositorio completo (es decir, clonarlo) de dos maneras:
origin
se crea una llamada remota para tiorigin
equivalentesGit hace que los cambios de contribución a la fuente de la bifurcación sean tan simples como pedirle a alguien del proyecto original que se retire de ti o solicitar acceso de escritura para impulsar los cambios tú mismo. Esta es la parte que GitHub facilita y estandariza.
No hay angustia porque su suposición es incorrecta. GitHub "extiende" la funcionalidad de bifurcación de Git con una buena GUI y una forma estandarizada de emitir solicitudes de extracción, pero no agrega la funcionalidad a Git. El concepto de bifurcación de repositorio completo se integra directamente en el control de versión distribuido a un nivel fundamental. Podrías abandonar GitHub en cualquier momento y seguir empujando / tirando proyectos que has "bifurcado".
fuente
X project
en mi máquina. Si hago cambios en mi local y no tengo acceso de escritura al origen, le enviaré un correo electrónico al autor del proyecto para solicitar una extracción. Hará un control remoto llamado gideon que será una url para mi clon local, y puede tirar, ¿verdad?Sí, el tenedor es un clon. Surgió porque no se puede enviar copias de otros sin su permiso . Te hacen una copia ( tenedor ), donde también tendrás permiso de escritura.
En el futuro, si el propietario real u otros usuarios con una bifurcación como sus cambios pueden devolverlo a su propio repositorio. Alternativamente, puede enviarles una "solicitud de extracción".
fuente
fork
significa que hay una copia de su trabajo en el servidor de GitHub, a la que puedepush
acceder y a la que otros tienen acceso a URL para que puedan hacerlopull
. Estapull request
es solo una forma estándar de obtener la URL de su copia (en GitHub) para que puedan acceder fácilmente a su repositorio."Bifurcación" en este contexto significa "Hacer una copia de su código para que pueda agregar mis propias modificaciones". No hay mucho más que decir. Cada clon es esencialmente una bifurcación, y depende del original decidir si sacar los cambios de la bifurcación.
fuente
on the GitHub server
para que pueda agregar mis propias modificacionesand others can have URL access to my version
". La mayoría de las estaciones de trabajo locales no ofrecen acceso a URL para que nadie pueda acceder. Pero si empuja a su bifurcación en el servidor, entonces pueden tener la URL para la extracción.La clonación implica hacer una copia del repositorio git en una máquina local, mientras que la bifurcación es clonar el repositorio en otro repositorio. La clonación es solo para uso personal (aunque pueden ocurrir fusiones futuras), pero con la bifurcación está copiando y abriendo una nueva ruta de proyecto posible
fuente
La bifurcación se realiza cuando decides contribuir a algún proyecto. Haría una copia de todo el proyecto junto con sus registros de historial. Esta copia se realiza completamente en su repositorio y una vez que realiza estos cambios, emite una solicitud de extracción. Ahora le corresponde al propietario de la fuente aceptar su solicitud de extracción e incorporar los cambios en el código original.
Git clone es un comando real que permite a los usuarios obtener una copia de la fuente. git clone [URL] Esto debería crear una copia de [URL] en su propio repositorio local.
fuente
Creo que fork es una copia de otro repositorio pero con la modificación de su cuenta. por ejemplo, si clona directamente otro repositorio localmente, el origen del objeto remoto sigue utilizando la cuenta desde la que clona. No puede comprometerse y contribuir con su código. Es solo una copia pura de los códigos. De lo contrario, si bifurca un repositorio, clonará el repositorio con la actualización de la configuración de su cuenta en su cuenta de github. Y luego clonando el repositorio en el contexto de su cuenta, puede confirmar sus códigos.
fuente
Aquí hay un malentendido con respecto a lo que es un "tenedor". Una bifurcación no es más que un conjunto de ramas por usuario. Cuando empuja a una bifurcación, realmente empuja al repositorio original, porque ese es el ÚNICO repositorio.
Puede probar esto empujando a una bifurcación, observando el commit y luego yendo al repositorio original y usando la ID de commit, verá que el commit está "en" el repositorio original.
Esto tiene mucho sentido, pero está lejos de ser obvio (solo descubrí esto accidentalmente recientemente).
Cuando John bifurca el repositorio SuperProject, lo que parece suceder realmente es que todas las ramas en el repositorio de origen se replican con un nombre como "John.master", "John.new_gui_project", etc.
GitHub "esconde" al "John". de nosotros y nos da la ilusión de que tenemos nuestra propia "copia" del repositorio en GitHub, pero no lo necesitamos y ni siquiera es necesario.
Así que la rama de mi tenedor "maestro" en realidad se llama "Korporal.master", pero la interfaz de usuario de GitHub nunca revela esto, mostrándome solo "maestro".
Esto es más o menos lo que creo que sucede debajo del capó de todos modos en función de las cosas que he estado haciendo recientemente y cuando lo reflexionas, es un muy buen diseño.
Por esta razón, creo que sería muy fácil para Microsoft implementar las bifurcaciones Git en su oferta de Visual Studio Team Services.
fuente
git clone
un repositorio completamente nuevo (incluso uno "desnudo") cada vez que alguien presiona el botón "tenedor", sería un desperdicio increíble de almacenamiento y probablemente también un vector de ataque. .Además del hecho de que la clonación es del servidor a su máquina y la bifurcación está haciendo una copia en el servidor mismo, una diferencia importante es que cuando clonamos, en realidad obtenemos todas las ramas, etiquetas, etc.
Pero cuando nos bifurcamos, en realidad solo obtenemos los archivos actuales en la rama maestra, nada más que eso. Esto significa que no obtenemos las otras ramas, etc.
Por lo tanto, si tiene que fusionar algo con el repositorio original, es una fusión entre repositorios y definitivamente necesitará mayores privilegios.
Fork no es un comando en Git; es solo un concepto que implementa GitHub. Recuerde que Git fue diseñado para trabajar en un entorno de igual a igual sin la necesidad de sincronizar cosas con ninguna copia maestra. El servidor es solo otro par, pero lo vemos como una copia maestra.
fuente
git branch -a
.En términos más simples,
Cuando dice que está bifurcando un repositorio, básicamente está creando una copia del repositorio original con su ID de GitHub en su cuenta de GitHub.
y
Cuando dice que está clonando un repositorio, está creando una copia local del repositorio original en su sistema (PC / laptop) directamente sin tener una copia en su cuenta de GitHub.
fuente