Cómo convertir un clon de git de solo lectura de github a uno bifurcado


79

De vez en cuando me encuentro con este problema.

Digamos que hice lo siguiente para leer el código fuente de rieles porque me encuentro con algunos problemas.

git clone git://github.com/rails/rails.git

Durante la investigación probé algo y ahora tengo una solución que me gustaría que el equipo central de Rails le diera un vistazo. ¿Cómo envío mis cambios a una versión bifurcada de rieles?

Recuerde que cuando cloné, no cloné una versión bifurcada sino una versión de solo lectura.

No es que me oponga a la bifurcación. Es solo que a veces creo que solo voy a navegar y luego quiero agregar algo.


Me gustaría verificar y ver si mi respuesta funciona para usted o si aún necesita más información. Si necesita más explicaciones o aclaraciones, hágamelo saber y puedo intentar ayudarlo. De lo contrario, es posible que desee aceptar una respuesta para indicar que la pregunta se ha respondido adecuadamente.
Brian Campbell

Respuestas:


112

Cuando clona un repositorio, automáticamente configura una llamada remota originque se refiere al repositorio que ha clonado. Esto ahora apunta al proyecto Rails ascendente, pero lo que necesita es crear su propia bifurcación a la que pueda presionar, y luego configurar un control remoto que apunte allí para que pueda presionar.

El primer paso es hacer clic en el botón "Bifurcación" en la página del proyecto de GitHub ascendente (imagen de las instrucciones de GitHub sobre la bifurcación ):

Botón de bifurcación de GitHub

Una vez que haya hecho eso, busque y copie la URL de ese repositorio. Asegúrese de utilizar la URL SSH, que tiene acceso de lectura y escritura. Debería ser algo como git@github.com:nadal/rails.git, asumiendo que su nombre de usuario es nadal.

Ahora puede crear el control remoto, lo que permite a Git realizar un seguimiento de un repositorio remoto, extrayéndolo o empujándolo según el acceso que tenga. Puede optar por reemplazar origincon el que empujará (que es la cantidad de personas que lo tienen configurado), o dejar originapuntando hacia arriba y en su lugar crear un nuevo control remoto. Mostraré cómo realizar la primera configuración; el segundo debería ser fácil de entender.

Para cambiar originpara apuntar a su bifurcación en GitHub, probablemente querrá mantener la rama ascendente en algún lugar, así que cámbiele el nombre a upstream:

git remote rename origin upstream

Ahora crea un nuevo control remoto apuntando a tu bifurcación:

git remote add -f origin git@github.com:nadal/rails.git

Y ahora debería poder avanzar a su nueva bifurcación:

git push origin master

Una vez que esté satisfecho con los cambios que ha introducido en GitHub y le gustaría que alguien del equipo de Rails lo examinara, tiene dos opciones. Uno es enviar una solicitud de extracción usando GitHub; consulte los documentos allí para saber cómo hacerlo. Sin embargo, si solo tiene uno o unos pocos parches pequeños, el equipo de Rails preferirá que cree un ticket de Lighthouse y adjunte su parche; consulte las instrucciones sobre cómo contribuir a Rails para obtener más información.

editar Aquí hay un diagrama para indicar lo que está pasando. Lo que ha hecho es simplemente clonar el repositorio de rieles ascendentes; por lo que ahora usted tiene su propio repo en su propia máquina, que se refiere a git://github.com/rails/rails.gitcomo origin:

Github: git: //github.com/rails/rails.git
                    ^
                    |
Mandos a distancia: origen
                    |
Su máquina: rieles /

Esto es lo que obtiene si bifurcó y luego clonó su bifurcación:

Github: git: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                                                           ^
                                                           |
Mandos a distancia: origen
                                                           |
Su máquina: rieles /

Si sigue mis instrucciones, esto es lo que obtendrá:

Github: git: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                        ^ ^
                        | |
Mandos a distancia: origen aguas arriba
                        | |
Su máquina: \ ------------------------------- carriles /

Que es como la versión que obtienes al bifurcar, excepto que también tiene un upstreamcontrol remoto para que puedas rastrear los cambios oficiales y fusionarlos en tu código (si has creado la versión bifurcada, probablemente querrías agregar el upstreamcontrol remoto como bien).


Es posible que en realidad no desee bifurcar, si como dice el póster original, a veces puede querer guardar algo de trabajo sin ningún enlace al original.
Adam Dymitruk

1
@adymitruk No, el OP mencionó que a veces clona el repositorio ascendente sin bifurcar, pero luego quiere contribuir de nuevo. Mencionó específicamente que le gustaría impulsar sus cambios a una versión bifurcada de Rails. No dijo nada sobre querer guardar el trabajo sin ningún vínculo al original.
Brian Campbell

es posible que quiera ser un contribuyente al proyecto real, entonces si no quiere bifurcar ... tan poco probable como es.
Adam Dymitruk

Gracias por la respuesta y perdón por la demora de mi parte. Como mencioné, no hice rieles de horquilla. Solo tengo un clon de rieles. Sin embargo, su respuesta asume que primero bifurqué los rieles. ¿Lo entendí bien?
Nick Vanderbilt

4
@Nadal Mi respuesta no asume que ya ha creado una bifurcación. Mi respuesta explica cómo convertir una situación en la que acaba de clonar un repositorio, en una en la que puede enviar sus cambios desde su repositorio local a una bifurcación. Bifurcar un repositorio en GitHub solo hace una copia en el servidor al que puede enviar; una vez que haya hecho eso, mis instrucciones le mostrarán cómo apuntar el repositorio local que ha creado, que en este momento apunta al repositorio oficial de rieles, para que en su lugar apunte a su bifurcación. Agregué un diagrama para indicar lo que está sucediendo; Espero que te ayude, avísame si tienes más preguntas.
Brian Campbell

3

Una forma muy fácil de cambiar del modo clonado al bifurcado es usar el hubcontenedor de http://hub.github.com/ .

Cuando esté instalado, simplemente ejecute

hub fork

desde dentro de su clon de solo lectura.


Funciona muy bien. La bifurcación se creará con el mismo nombre remoto que su nombre de usuario de github.
Zitrax

1

No debería importar. Puede agregar otro control remoto, especificando su repositorio no bifurcado, si así lo desea. Empuje sus cambios a eso.


¿Cómo agrego otro control remoto? Lo siento. novato en git world.
Nick Vanderbilt

1
puede bifurcar más tarde y luego pasar a su repositorio bifurcado ... en caso de que aún no lo haya bifurcado. La bifurcación te hace tu propia "copia" del repositorio que te interesa.
Adam Dymitruk

por ahora, puede crear un nuevo repositorio en github. Agréguelo como un control remoto al que clonó desde el repositorio de rieles y empuje solo al nuevo. Creo que esto es lo que buscas. No es necesario bifurcar.
Adam Dymitruk

1
git remote agregar myrepo git: //github.com/myid/mynotforkedrepo.git
Adam Dymitruk

¿Creaste un repositorio en github (o en otro lugar) todavía?
Adam Dymitruk

0

O, si no quiere bifurcar, y dependiendo del equipo de mantenimiento, puede crear y enviarles un parche. En general, sin embargo, haría que su repositorio estuviera disponible ya sea bifurcando en github como se explica en otros comentarios, o en su propio repositorio de git y proporcione a los mantenedores del repositorio original la información de su repositorio y rama en la que desea que se fusionen.


1
No entiendo por qué uno no querría bifurcarse de todos modos, ¡ya que es solo una bifurcación simple! No es una versión completamente nueva del proyecto, solo tu copia del código fuente que esperas que esté fusionado. Como una serie de parches.
alternativa

1
Podría ser que la persona no tenga una cuenta de Github pero aún así le gustaría contribuir al proyecto. Pueden clonar el proyecto, editar y enviar parches o su rama al proyecto original para su inclusión. Pero es cierto que no hay una razón real para no bifurcar si puede.
Svenito
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.