Copie / bifurque un repositorio de git en github en la misma organización

82

Tengo un repositorio en github que contiene una aplicación web que se implementa en dos dominios diferentes. La aplicación tiene ligeras bifurcaciones lógicas aquí y allá para comportarse de manera diferente según el dominio en el que se implemente.

Ha llegado al punto en el que quiero dividirlo en dos repositorios separados, uno para cada dominio.

Github no me deja dividirlo en la misma organización. La búsqueda de "git duplicate repo" sugiere que debería clonar y duplicar, pero eso parece ser para mantener ambos repositorios sincronizados, lo que no quiero hacer.

¿Cuál es la mejor manera de hacerlo? Me gustaría conservar el antiguo historial de confirmaciones en la nueva copia si es posible.

jemminger
fuente
1
En realidad, las opciones git clone --barey git push --mirrorson exactamente lo que desea. Esto no mantiene sincronizados ambos repositorios. Pero conserva todo , incluidas todas las ramas, etiquetas, etc. Simplemente haga esto en un directorio temporal para hacer una copia. Luego, clone la nueva copia directamente desde su control remoto en el directorio de su proyecto.
vastlysuperiorman

Respuestas:

103

Simplemente cree un nuevo repositorio y envíelo desde su copia de trabajo:

git clone [email protected]:me/myrepo-original
cd myrepo-original
git remote set-url origin [email protected]:me/myrepo-new
git push origin master

Ahora tiene un nuevo repositorio myrepo-new, que es idéntico a myrepo-original.

larsks
fuente
3
Ok, y estos no se rastrearán entre sí, ¿verdad? ¿Significa que se convierten en dos repositorios desconectados separados? Eso es lo que yo quiero.
jemminger
3
Ninguno de los repositorios se actualizará a menos que lo haga pushexplícitamente, y el repositorio "nuevo" no mostrará ninguna relación con el anterior.
larsks
¡Gracias! Parece que esto es lo que necesito.
jemminger
3
También puede empujar todas las ramas:git push --all origin
Marius
Esto funcionó para mí, pero tuve que cambiar a un formato diferente para la URL: $ git remote set-url github.com/me/myrepo-new.git
Enfors
15

Si no necesita la relación de bifurcación (por ejemplo, si desea algún tipo de repositorio alternativo desacoplado por cualquier motivo), duplicar el repositorio como se describe en sus hallazgos de Google y la respuesta de larsks está bien.

Si no desea que sea un tenedor, el apoyo Github contacto ([email protected] o https://github.com/support ), y se creará un tenedor en la misma organización para usted. (Tampoco son exigentes con esto, solo tendrá que proporcionar un nombre alternativo para el repositorio, ya que los nombres de repositorio dentro de una cuenta deben ser únicos).


Actualización : el usuario Steve Rice informa en los comentarios a continuación que el soporte de GitHub declaró que el soporte actualmente no configuraría / ya no configuraría una segunda bifurcación en su cuenta.

GitHub publicó recientemente un artículo sobre posibles alternativas para bifurcar un repositorio en la misma cuenta. Puedes leer ese artículo aquí .

Nevik Rehnel
fuente
4
Soporte contactado, su respuesta: "En este momento, una cuenta no puede poseer dos repositorios en la misma red". Sugieren configurar un repositorio espejo en su lugar.
Steve Rice
ahw que apesta. lo siento, no sabía que habían cambiado su política :(
Nevik Rehnel
10

Use la opción Importar repositorio de Github en el menú + en la parte superior de la página o simplemente abra

https://github.com/new/import

Esto crea un nuevo repositorio con el contenido exacto del repositorio copiado. La desventaja (la misma que la respuesta de Iarsks para los comandos de git ) es que no cuenta como un tenedor para Github.

sarob
fuente
¿Cómo no pudiste hacer que esta opción funcionara? Acabo de volver a probarla y funciona en dos sencillos pasos. Alternativamente, cree un repositorio local en github, luego use la función de importación allí, por ejemplo, github.com/sarob/mytest/import .
sarob
Podría ser algo con nuestro GHE vs github.com pero no funciona allí.
serraosays
4

Otra forma sería agregar el repositorio original, que se copiará, como remoto para nuestro repositorio actual.

#create a new repo in the org1 organization called myrepo-new

En su terminal local, ejecute:

git clone [email protected]:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master
Vinay Vemula
fuente
1

Solución alternativa:

Cree una nueva organización y bifíquela allí. Si el repositorio es privado, también seguirá siendo privado en la nueva organización. Luego, puede dar acceso a desarrolladores externos o quien desee al repositorio bifurcado y ellos pueden aumentar los PR al repositorio original.

csaboable
fuente
-2

¿No podría simplemente duplicar la carpeta local, eliminar las cosas de git:

rm -rf .git*

Entonces, ¿crear un nuevo repositorio en esa carpeta? Parece más limpio y fácil.

Ben Wilson
fuente
2
Eliminar ./.git/no ayudaría con la intención declarada del OP, "preservar el antiguo historial de confirmaciones en la nueva copia si es posible".
MarkHu