2012-03-23 152 views
48

Tengo un repositorio git remoto que realmente reemplazó todo lo que teníamos en otro SCM anterior. Muchos proyectos y productos se han agregado al repositorio a lo largo de los años.cómo crear un nuevo repositorio git a partir de uno existente

Hay una rama en este repositorio, que corresponde a un producto que me interesa. Quiero hacer un nuevo repositorio git de esta rama solamente, sin preocuparme realmente por la pérdida de historial.

¿Es git remote agregar la solución? Quiero que ambos repositorios estén en el mismo servidor.

¿Pensamientos?

Respuesta

54

Con el fin de crear un nuevo repositorio Git desde un repositorio existente que uno normalmente crear un nuevo desnudo repositorio y empujar una o más ramas de la existente al nuevo repositorio.

los pasos siguientes se ilustra esto:

  1. Crear un nuevo repositorio. Debe ser descubierto para que pueda presionarlo.

    $ mkdir /path/to/new_repo 
    $ cd /path/to/new_repo 
    $ git --bare init

    Nota: asegúrese de que el nuevo repositorio es accesible desde el repositorio existente. Hay muchas maneras de hacer esto; supongamos que lo ha hecho accesible a través del ssh://my_host/new_repo.

  2. Empuje una rama de su repositorio existente. Por ejemplo, digamos que queremos insertar la rama topic1 del repositorio existente y ponerle el nombre master en el nuevo repositorio.

    $ cd /path/to/existing_repo 
    $ git push ssh://my_host/new_repo +topic1:master

Esta técnica le permite mantener la historia de la rama existente.

+6

Si va a presionar regularmente al repositorio remoto, probablemente sea un buen consejo para 'git remote add origen ssh: // my_host/new_repo'. De esta forma, simplemente 'haces un' origen de git push [nombre de rama] '. Al usar las plantillas de archivos UNC (por ejemplo, para Windows), asegúrese de ingresar agregar el origen remoto de esta manera: 'git remote add origin" // server_name/myapp/"' –

+1

gracias: 'bare' era lo que necesitaba haz que funcione –

13

Si no está preocupado por perder el historial, haga un git checkout mybranch y luego copie el contenido del directorio en otra carpeta. Dentro de esa carpeta, elimine la carpeta y luego .git:

git init; git commit -a -m "Imported from project Y" 
+1

¿Esto mantendrá el historial de confirmación del repositorio original? –

+11

@MikeGraf: No, como se señala en la primera parte de la primera oración de la respuesta: * "Si no te preocupa perder historia ..." * –

+1

Es posible que debas eliminar/editar .gitignore también, de lo contrario, el comando anterior dejará atrás archivos potencialmente importantes durante la confirmación. – Dave

15

tirar hacia abajo la rama como normal y luego empuje la rama de un nuevo repositorio que ha creado usando git init. Se podría utilizar código que se ve algo como:

git push url:///new/repo.git TheBranchFolder 

Este método también mantiene todos los cambios anteriores si eso es una ventaja para la situación.

+0

Estoy usando el acceso ssh a mi repositorio, ¿puedo usarlo en lugar de la URL en su respuesta? – reza

+0

Debería poder, sí. – JustinDoesWork

+0

reza: sí, piense en la URL de ssh como un tipo diferente de URL. – amcnabb

Cuestiones relacionadas