2010-02-12 26 views

Respuesta

18

No es necesario hacer que el repositorio original sea el control remoto de "origen" para clonar la rama maestra.

en la nueva máquina, crear un nuevo repositorio:

git init foo 

A continuación, tire de la antigua repositorio a la nueva, sin necesidad de crear un mando a distancia:

cd foo 
git pull <reference to old repository> 

Sin embargo, cabe señalar que La forma más fácil de guardar un repositorio sería simplemente cerrar el directorio del repositorio y mover los archivos a una máquina nueva. Eso preservará todos los controles remotos, etiquetas, etc.

Como se indica a continuación, al copiar el repositorio, tenga cuidado al pasar de sistemas de archivos sensibles a mayúsculas y minúsculas (por ejemplo, Linux, Mac, NTFS) a por ejemplo, Fat32).

+1

Eso es genial, no sabía que podrías hacer eso. ¿Puedes clonar ramas no maestras de esa manera también? – ebneter

+0

Si aplica esto último, no copie algo de una partición que no sea FAT32 a FAT32 y viceversa. http://stackoverflow.com/questions/1754108/i-backed-up-a-git-project-and-got-fatal-not-a-git-repository –

+0

¿Harías lo primero con o sin 'file:/// ', es decir, usando' git pull/home/username/blah' contra 'git pull file: /// home/username/blah'? –

1

Creo que necesitaría eliminar la rama remota.

+0

Si quieres que nombre algo diferente, puedes hacer git clone -o not_origin –

+0

El problema es que cuando eliminas el control remoto (no la rama remota), eliminas todas las ramas remotas/ también. – ebneter

+0

@ebneter: ¿qué quiere decir con "eliminar el control remoto (no la rama remota)"? –

1

¿El repositorio remoto tiene más sucursales que el maestro? Es más complicado si lo hace; también necesita hacer copias locales de todas las ramas porque cuando elimina el control remoto, todas las ramas remotas/de origen desaparecerán. (Acabo probé!)

lo tanto, puede hacer algo como esto:

git clone <remote_url> 
cd <repo> 
for b in $(git branch -r | grep -v HEAD | grep -v master);do 
    git branch $(basename $b) $b 
done 
git remote rm origin 

Por supuesto, como dijo Jess Bowers, es aún más fácil simplemente tar o zip para arriba y mover los archivos, si tiene acceso a la máquina para hacer eso.

Usted también puede simplemente hacer un clon desnudo:

git clone --bare <remote_url> 

y luego hacer nuevos clones de eso.

2

La forma más general, para manejar una trasfer sería git bundle. Ver Backup of github repo.

Desde el segundo (nuevo) escritorio:

git bundle create file:///\\oldDesktop/share/myGitRepo --all 

para crear un archivo local desde la que usted será capaz de clonar un repositorio git local.

Nota: el protocolofile:/// apoyará UNC (Convención de nomenclatura universal) de Windows, con el resto de la ruta mediante '/' en lugar de '\'. Ver Git on a Windows Lan.

6

En primer lugar, puede utilizar la opción de --origin <name>git clone

--origin <nombre>, -o <nombre>

En lugar de utilizar el nombre remoto origen para realizar un seguimiento del repositorio aguas arriba, use <nombre>.

En segundo lugar, se puede utilizar para agregar git remote add repositorio a buscar a partir de repositorio existente (lo que puede utilizar git init, entonces git remote add <name> <url>).


Si desea crear un espejo del repositorio, con refs/heads/* entrar en refs/heads/* en el clon, puede init repositorio, configuración refspec correspondiente y, después fetch ...

O puede utilizar git clone --mirror, que debería responder la versión actual de la pregunta de OP.

Sin embargo, esto no preservaría la configuración (incluidos los controles remotos), el estado del grupo de trabajo, los reflogs, etc. Para esto, necesitaría copiar el repositorio entero, como Jess Bowers said.

+0

El problema con el uso de '--origin' es que *** tienes que especificar un origen remoto ***, ¿correcto? Estoy tratando de encontrar una manera simple de clonar (o clonar eficazmente) de modo que el clon no tenga ningún alias remoto configurado. Por supuesto, siempre puedes hacer 'git remote rm origin', pero esperaba encontrar algo que hiciera esto en un solo paso. –

+2

@Cupcake: Desafortunadamente hay (hasta donde yo sé) ninguna solución de un solo paso. Puede clonar (1), luego eliminar la información remota de 'origen' (2) o inicializar el repositorio (1) y buscar todas las ramas y etiquetas usando la URL en lugar del nombre remoto (2). –

+0

Su respuesta es para una pregunta diferente a la preguntada. –

Cuestiones relacionadas