Crear manualmente una horquilla Git

Si entiendo bifurcar, conceptualmente implica los siguientes pasos:

  1. Duplicar duplicar el repository de origen a un repository de destino
  2. Establezca un control remoto "ascendente" en el repository de destino, apuntando al repository de origen
  3. Algunas otras cosas, como suscripciones por correo electrónico, etc. (no es importante para esta pregunta)

Así es como esto luce:

Original <──upstream─── Forked (server) (server) ↑ │origin │ (local) 

La diferencia key con respecto a la clonación es que estos pasos son del lado del server , no del local. ¿Cómo replico esto manualmente, en la línea de command de git?

Esto es lo que hice hasta ahora:

  1. Clone el repository de origen a un repository local
  2. Cambie el control remoto de "origen" para señalar el repository de destino deseado
  3. Agregue un control remoto "ascendente" que apunte al repository de origen

En esta etapa, tengo todo configurado en el repository local. Puedo sincronizar los cambios entre el repository original y el bifurcado utilizando un clon local intermedio. Entonces esto es lo que tengo:

 Original Forked (server) (server) ↑ ↑ │ │origin │ │ └───────upstream─── (local) 

Ahora, ¿cómo puedo insert este enlace en el server, es decir, hacer que el repository original sea un control remoto en sentido ascendente del repository bifurcado del lado del server , para que coincida con el primer diagtwig?

Tenga en count que esta pregunta no es específica de GitHub. También podría querer hacer esto con BitBucket. Idealmente, debería ser capaz de hacer esto en los sitios también. He leído muchas preguntas similares aquí en SO, pero no hay una respuesta clara.

Puede bifurcar un proyecto en Bitbucket utilizando su API en command-line, pero necesita al less acceso de lectura al proyecto fuente.

La syntax es:

 curl -v --user {username}:"{password}" \ https://bitbucket.org/api/1.0/repositories/{accountname}/{repo_slug}/fork \ --data "name=mynewrepo" 

p.ej

  1. Para bifurcar un proyecto projectABC desde una count ABC a su count XYZ con el nombre ProjectXYZ , use el siguiente command

     curl -v --user XYZ:"XYZPASSWORDXYZ" \ https://bitbucket.org/api/1.0/repositories/ABC/ProjectABC/fork \ --data "name=ProjectXYZ" 

    ver la documentation de Bitbucket para más detalles.

  2. Ahora clone este proyecto en su máquina local,

     git clone your_target_git_repository_path 
  3. Vaya a su directory de proyectos y agregue conexiones upstream remotas que apuntarán al repository fuente,

     git remote add upstream source_git_repository_path 
  4. Ahora, en cualquier momento para extraer los cambios del repository de origen (digamos de la twig principal), use:

     git pull upstream master 

    y para enviar sus confirmaciones locales a su repository de destino en el server, use: git push origin master

  5. Y cuando los cambios en el repository de destino estén listos para fusionarse con el repository de origen, cree una Solicitud de extracción desde el website de Bitbucket o utilizando la API de Bitbucket: Solicitud de extracción

Los pasos para crear una copy local del repository – apuntando al repository bifurcado final son los que usted ha detallado.

El siguiente paso sería crear el repository bifurcado. Se puede hacer desde la línea de command usando Github API – no git ; ver http://sofes.miximages.com/a/2425632/429758 para más información.

Después de eso, es un git push origin master simple para completar el bifurcación manual.

Nota: Bitbucket también proporciona una API REST que permite crear el repo bifurcado desde la command-line.

Cuando empujas hacia tu tenedor, testing esta opción: –mirror

https://git-scm.com/docs/git-push#git-push—mirror

Esto puede significar que necesita especificar la opción –mirror al clonar también para get los controles remotos a su repository local.

Alternativamente, puede include un script de configuration remota en su repository y consultarlo en el manual de configuration del desarrollador de su proyecto.

Para GitHub, aparentemente ahora puede hacer esto con la CLI del hub con el hub fork del command. No lo he usado, pero basado en los documentos parece que harías esto:

 git clone git@github.com:some_user_or_organization/some_project.git cd some_project hub fork 

… y terminarías con dos controles remotos: origin apuntando a la stream ascendente, y uno con el mismo nombre que tu nombre de usuario GitHub apuntando a tu nuevo tenedor. (Sería bueno si hub también cambia los nombres remotos para que sean "ascendentes" y "origen", respectivamente, pero no creo que lo haga).