¿Cómo puedo bifurcar un repositorio público, pero hacer que mi bifurcación sea privada? Tengo la suscripción para admitir repositorios privados.
¿Cómo puedo bifurcar un repositorio público, pero hacer que mi bifurcación sea privada? Tengo la suscripción para admitir repositorios privados.
Respuestas:
Las respuestas son correctas, pero no mencionan cómo sincronizar el código entre el repositorio público y la bifurcación.
Aquí está el flujo de trabajo completo (lo hemos hecho antes de abrir el código React Native ):
Primero, duplique el repositorio como otros dijeron (detalles aquí ):
Cree un nuevo repositorio (llamémoslo private-repo
) a través de la interfaz de usuario de Github . Luego:
git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git
Clone el repositorio privado para que pueda trabajar en él:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
Para sacar nueva actualidad del repositorio público:
cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master
Impresionante, su repositorio privado ahora tiene el último código del repositorio público más sus cambios.
Finalmente, para crear una solicitud de extracción de repositorio privado -> repositorio público:
Use la interfaz de usuario de GitHub para crear una bifurcación del repositorio público (el pequeño botón "Bifurcación" en la parte superior derecha de la página del repositorio público). Luego:
git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname
Ahora puede crear una solicitud de extracción a través de la interfaz de usuario de Github para public-repo, como se describe aquí .
Una vez que los propietarios del proyecto revisen su solicitud de extracción, pueden fusionarla.
Por supuesto, todo el proceso puede repetirse (solo omita los pasos donde agrega controles remotos).
git clone
configuración normal establecerá ramas de seguimiento remoto y tal vez alguna otra configuración en el repositorio clonado que realmente no desea. Mientras que un clon --bare simplemente copia el directorio .git del control remoto tal como está.
git status
muestra todo actualizado, el árbol de trabajo limpio, no importa lo que cambie. En consecuencia, no puedo comprometerme y presionar nada. Eliminé el nuevo repositorio privado que hice 2 veces más para intentarlo, pero seguí encontrando este mismo problema. ¿Alguna sugerencia?
Hay una opción más ahora (enero-2015)
Las respuestas actuales están un poco desactualizadas, por lo que, para mayor claridad:
La respuesta corta es:
Esto está documentado en GitHub: duplicating-a-repository
Tienes que duplicar el repositorio
Puedes ver este documento (de github)
Para crear un duplicado de un repositorio sin bifurcación, debe ejecutar un comando de clonación especial contra el repositorio original y empujar en espejo al nuevo.
En los siguientes casos, el repositorio al que intenta ingresar, como exampleuser / new-repository o exampleuser / mirrored, ya debería existir en GitHub. Consulte "Creación de un nuevo repositorio" para obtener más información.
Reflejando un repositorio
Para hacer un duplicado exacto, debe realizar un clon desnudo y un empuje espejo.
Abra la línea de comando y escriba estos comandos:
$ git clone --bare https://github.com/exampleuser/old-repository.git # Make a bare clone of the repository $ cd old-repository.git $ git push --mirror https://github.com/exampleuser/new-repository.git # Mirror-push to the new repository $ cd .. $ rm -rf old-repository.git # Remove our temporary local repository
Si desea duplicar un repositorio en otra ubicación, incluida la obtención de actualizaciones del original, puede clonar un reflejo e impulsar periódicamente los cambios.
$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git # Make a bare mirrored clone of the repository $ cd repository-to-mirror.git $ git remote set-url --push origin https://github.com/exampleuser/mirrored # Set the push location to your mirror
Al igual que con un clon desnudo, un clon reflejado incluye todas las ramas y etiquetas remotas, pero todas las referencias locales se sobrescribirán cada vez que obtenga, por lo que siempre será el mismo que el repositorio original. Establecer la URL para los empujes simplifica empujar a su espejo. Para actualizar su espejo, obtenga actualizaciones y presione, lo que podría automatizarse ejecutando un trabajo cron.
$ git fetch -p origin $ git push --mirror
GitHub ahora tiene una opción de importación que le permite elegir lo que quiera su nuevo repositorio importado público o privado