2010-11-17 7 views
80

De vez en cuando me encuentro con este problema.Cómo convertir un clon git de solo lectura de github a uno bifurcado

Digamos que hice lo siguiente para leer el código fuente de los rieles porque me estoy encontrando 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 revise el equipo central de rieles. ¿Cómo envío mis cambios a una versión bifurcada de los rieles?

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

No es que me opongo a bifurcar. Es solo que a veces creo que voy a navegar y luego quiero agregar algo.

+0

Me gustaría registrarme 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. –

Respuesta

1

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

+0

¿Cómo agrego otro control remoto? Lo siento. novato en el mundo git. –

+1

puede bifurcar más tarde y luego presionar a su repositorio bifurcado ... en caso de que aún no haya bifurcado. Forking te convierte en tu propia "copia" del repositorio en el que estás interesado. –

+0

por ahora puedes hacer un nuevo repositorio en github. Agréguelo como un control remoto al que clonó desde el repositorio de rieles y presione solo el nuevo. Creo que esto es lo que buscas. No es necesario bifurcar. –

110

Cuando clona un repositorio, configura automáticamente un control remoto llamado origin que hace referencia al repositorio que ha clonado. Esto ahora está apuntando al proyecto de Rails aguas arriba, pero lo que necesita es crear su propia horquilla a la que pueda presionar, y luego configurar un control remoto que apunte allí para que pueda empujar hacia ella.

El primer paso es hacer clic en el botón "Tenedor" en la página de aguas arriba del proyecto GitHub (imagen desde GitHub instructions on forking):

GitHub fork button

Una vez que hayas hecho esto, encontrar y copie la dirección URL para que se repo. Asegúrese de utilizar la URL SSH, que tiene acceso de lectura y escritura. Debería ser algo así como [email protected]:nadal/rails.git, suponiendo que su nombre de usuario es nadal.

Ahora puede crear el control remoto, que permite a Git realizar un seguimiento de un repositorio remoto, extraerlo o empujar hacia él, según el acceso que tenga. Puede optar por reemplazar origin con el que va a presionar (que es la cantidad de gente que lo tiene configurado), o dejar origin apuntando a la corriente ascendente y en su lugar crear un nuevo control remoto. Mostraré cómo hacer la primera configuración; el segundo debería ser fácil de entender.

Para cambiar origin para apuntar a su tenedor en GitHub, es probable que desee para mantener la rama aguas arriba en alguna parte, así que cambie su nombre por upstream:

git remote rename origin upstream 

A continuación, cree un nuevo control remoto apuntando a su tenedor:

git remote add -f origin [email protected]:nadal/rails.git 

Y ahora usted debe ser capaz de empujar a su nuevo tenedor:

git push origin master 

Una vez que esté satisfecho con los cambios que ha hecho subir a GitHub, y quisiera que alguien del equipo de Rails lo revise, tiene dos opciones. Una es para send a pull request usando GitHub; ver los documentos allí para saber cómo hacer eso. Sin embargo, si solo tiene uno o algunos parches pequeños, el equipo de Rails preferiría que fuera create a Lighthouse ticket y le adjuntara el parche; vea las instrucciones en contributing to Rails para más información.

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

 
Github: git://github.com/rails/rails.git 
        ^
        | 
Remotes:   origin 
        | 
Your machine:  rails/ 

Esto es lo que se obtiene si se bifurcada y luego clonar el tenedor:

 
Github: git://github.com/rails/rails.git <-- [email protected]:nadal/rails.git 
                 ^
                  | 
Remotes:            origin 
                  | 
Your machine:           rails/ 

Si usted sigue mi instrucciones, esto es lo que usted conseguirá:

 
Github: git://github.com/rails/rails.git <-- [email protected]:nadal/rails.git 
         ^        ^
         |         | 
Remotes:   upstream       origin 
         |         | 
Your machine:   \-------------------------------rails/ 

cuál es igual que la versión que se obtiene por la que se bifurcan, excepto que también tiene un upstream control remoto para que pueda rastrear los cambios oficiales y fusionarlos en su código (si creó la versión bifurcada, probablemente también desee agregar el control remoto upstream).

+0

Puede que en realidad no desee bifurcar, si, como dice el cartel original, a veces puede que desee guardar algo de trabajo sin ningún vínculo al original. –

+1

@adymitruk No, el OP mencionó que a veces clona el repositorio upstream sin bifurcaciones, pero luego desea volver a contribuir después. Mencionó específicamente que le gustaría llevar sus cambios a una versión bifurcada de Rails. No dijo nada sobre querer salvar el trabajo sin ningún vínculo con el original. –

+0

él puede querer ser un colaborador del proyecto real, entonces, si no quiere bifurcar ... tan poco probable como es. –

0

O, si no desea bifurcar, y dependiendo del equipo de mantenimiento, puede crear y enviar un parche para ellos. En general, usted haría su repositorio disponible ya sea mediante bifurcación en github como se explica en otros comentarios, o en su propio git repo y proporcionará a los mantenedores del repositorio original la información para su repositorio y sucursal en la que desea que se fusionen.

+1

No entiendo por qué uno no querría bifurcar de todos modos, ya que es simplemente un tenedor! No es una versión completamente nueva del proyecto, solo tu copia del código fuente que esperas fusionar. Al igual que una serie de parches. – alternative

+1

Podría ser que la persona no tiene una cuenta de Github pero aún desea contribuir con el proyecto. Pueden clonar el proyecto, editar y enviar parches o su sucursal al proyecto original para su inclusión. Pero es cierto que no hay ninguna razón real para no bifurcarte si puedes. – Svenito

3

Una manera muy fácil de cambiar de modo clonado a bifurcado es usar el contenedor hub de http://hub.github.com/.

Cuando esto está instalado, simplemente ejecute

hub fork 

desde dentro de su clon de sólo lectura.

+0

Funciona bien. El tenedor se creará con el mismo nombre remoto que tu nombre de usuario github. – Zitrax

Cuestiones relacionadas