¿Cómo duplicar un repositorio de git? (sin bifurcar)

117

Tengo dos repositorios y necesito copiar todo uno en el otro vacío que tiene diferentes niveles de acceso al primero. La copia y el repositorio madre no deben estar vinculados.

Soy nuevo en git y sería genial si alguien pudiera ayudarme con esto.

cowboybebop
fuente
5
No estoy seguro, pero supongo que podría clonarlo y luego usar git config remote.origin.url git: //new.url/proj.git para configurar el remote.origin a su nuevo representante.
Rufinus
Ya, el enlace que acabo de publicar hace algo así.
nbz
@rudinus Hice precisamente eso. Gracias.
cowboybebop

Respuestas:

205

Ver https://help.github.com/articles/duplicating-a-repository

Version corta:

Para hacer un duplicado exacto, debe realizar tanto un clon desnudo como un mirror-push:

mkdir foo; cd foo 
# move to a scratch dir

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

NOTA: lo anterior funcionará bien con cualquier repositorio de git remoto, las instrucciones no son específicas de github

Lo anterior crea una nueva copia remota del repositorio. Luego clónalo en tu máquina de trabajo.

Larry K
fuente
2
¿Qué sucede si los repositorios antiguo y nuevo tienen el mismo nombre (no la misma URL de git)? Como en, simplemente Jeremy.gitJeremy.git
cloné
Este no será un duplicado exacto. Los problemas no se transferirán.
Slam
¿Conserva esto la historia?
Thomas
@Thomas Acabo de hacer esto y sí, conservó toda mi historia en la copia. Tenga en cuenta que después de presionar y hacer cd en el nuevo repositorio, todavía no hay nada allí porque presionó el control remoto, por lo que debe hacer un tirón
PfunnyGuy
7
Para que esta respuesta funcione con GitHub, primero se debe crear el nuevo repositorio en GitHub.
Alex Holcombe
23

También puede usar git-copy .

Instálalo con Gem,

gem install git-copy

Luego

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git
Quanlong
fuente
1
¿Cómo instalas gem en primer lugar? Esta parece la solución más sencilla. ¡Voto a favor!
saran3h
Por lo general, es parte de una instalación de Ruby. En Ubuntu sí sudo apt install ruby.
daño
10

Si está copiando a GitHub, puede usar el Importador de GitHub para hacerlo por usted. El repositorio original puede ser incluso de otros sistemas de control de versiones.

Mateus Gondim
fuente
4
Esto funciona perfectamente e incluso mantiene la historia - debería tener una votación más alta
John D
1
Estoy de acuerdo. Este enfoque es mucho más intuitivo, se puede hacer completamente dentro de la GUI de Github y no implica ninguna de esas tonterías confusas de la línea de comandos. Pasos: 1) En la GUI, cree el nuevo repositorio pero no haga clic en la casilla de verificación etiquetada "Inicializar este repositorio con un README". Después de hacer esto, Github le presentará una nueva página y una opción etiquetada "... o importar código desde otro repositorio ". ¡Eso es!
Luke F.
5

Si solo desea crear un nuevo repositorio utilizando todos o la mayoría de los archivos de uno existente (es decir, como una especie de plantilla), creo que el enfoque más fácil es crear un nuevo repositorio con el nombre deseado, etc., clonarlo para su escritorio, luego simplemente agregue los archivos y carpetas que desee en él.

No obtienes todo el historial, etc., pero probablemente no quieras eso en este caso.

tim
fuente
-1

Terminal abierta.

Crea un clon desnudo del repositorio.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

Kundan roy
fuente
Probé tu enfoque. Y recibí este mensaje de error:! [remoto rechazado] maestro -> maestro (gancho de pre-recepción rechazado) y varios otros mensajes similares. El último fue: error: no se pudieron presionar algunas referencias ¿Cómo puedo corregir eso?
LND