Debe bifurcar el proyecto, sí. Sin embargo, esto no significa que deba volver a clonar toda la información localmente.
Explicación: una forma simple de ver un repositorio de git es un gráfico de confirmaciones (es directo y acíclico, pero eso es irrelevante para esta discusión); y todos los nodos de este gráfico, es decir, los commits, tienen un identificador único en todos los repositorios de git en el mundo. En cuanto a las ramas, son solo referencias simbólicas a una confirmación (en el lenguaje git, una rama - o una etiqueta - se llama refspec).
Además, usted es nunca vinculado a un repositorio remoto de ninguna manera. Lo único que realmente está "vinculado" es el gráfico de confirmación. Un repositorio remoto simplemente tiene un conjunto de refspecs (ramas, etiquetas) ... que apuntan a un gráfico de compromiso, que también tienen: a nadie le gusta las referencias colgantes. Cuando clonas un repositorio, obtienes el gráfico de compromiso (y los árboles asociados) y el conjunto de refspecs (es decir, ramas, etiquetas). Un refspec apunta a un árbol. Y eso es todo.
Esto significa lo siguiente:
- que tiene el repositorio GitHub originales: un gráfico de confirmaciones y árboles asociados, un conjunto de refspecs;
- lo ha clonado localmente: el mismo gráfico de confirmaciones y árboles asociados, el mismo conjunto de referencias;
- ha asignado material localmente: ha agregado este gráfico y los árboles asociados, y ha agregado un nuevo conjunto de réplicas.
bien, ahora lo siguiente:
- clon del repositorio original en github: el mismo gráfico de confirmaciones y árboles como el original; las refspecs están aquí, solo precedidas con el nombre remoto, que es
origin
de forma predeterminada. ¿Y ahora qué?
- en su repositorio local, añadir su tenedor como un control remoto;
- empuje hacia esa horquilla (esto empujará las refspecs y los árboles);
- envíe una solicitud de extracción.
Agregando su tenedor como un control remoto es tan "simple" como:
git remote add myfork [email protected]:youruser/theproject
empujar su refspec (rama) a la misma:
git push myfork mybranch
y luego presentar una solicitud de extracción a la autor original
Cabe señalar que, en teoría, puede agregar un control remoto para un repositorio Git que no tiene relevancia en absoluto con el repositorio "original": esto es, simplemente, que los dos se comprometen gráficos serán completamente inconexos entre sí - Sin embargo, los casos de uso para esto son raros
"Nadie hace eso", lo hago a veces, cuando quiero fusionar dos proyectos completos, conservando el historial completo de ambos. –
Además, no hay necesidad de 'git fetch'. –
@larsmans puntos tomados ... Digamos que "nadie hace eso" podría ser reemplazado por "los casos de uso para esto son raros"? – fge