2011-10-31 21 views
59

Esta pregunta puede ser tonta, pero me lo he estado preguntando por un tiempo. Se trata de repositorios de git, pero supongo que es lo mismo para los repositorios locales de otros DVCS.Mover un repositorio de git

permite decir mi proyecto es como siguiente, cuando comienza:

  • Proyecto
    • .git
    • todas las otras carpetas en el proyecto

Así es cómo funcionaría cuando lo configures ¿verdad?

Digamos que mover la carpeta de proyecto en otro lugar, tendría que cambiar algo? O todo el material del repositorio en la carpeta .git está relacionado solo con la carpeta Project ignorando todo el árbol de archivos sobre Project.

Estoy bastante seguro de Proyecto en movimiento no importaría, pero sólo quería asegurarse.

+0

mientras mueve la carpeta .git está bien –

Respuesta

22

Sí, todo en .git es relativo. Sin embargo, si ha agregado el repositorio como un control remoto con nombre a otro repositorio, tendría que cambiar la URL remota en ese otro repositorio.

+12

No, esto está mal. Vea las respuestas sobre los submódulos a continuación. – erikkallen

+1

@erikkallen vea mi comentario sobre esa respuesta explicando cómo no pude verificar esas declaraciones. (Si puedo llegar al fondo de lo que está pasando, voy a editar mi respuesta en consecuencia.) –

6

No, no tendría que cambiar nada más. Es decir

  • suponiendo que no hay guiones establecidos GIT_DIR, GIT_WORKTREE o GIT_INDEX directamente (poco probable)
  • No tiene repositorios externos que apuntan a esta copia

    • si lo hace tendrá que repoint ellos mediante el uso

      git remote set-url [--push] origin [email protected]:/home/user/newlocation/Project 
      

(origen debe ser el nombre de la distancia; origen es el nombre por defecto cuando se clona a partir de un acuerdo de recompra a distancia)

+0

Esto! Cuando solo utilizas 'remote set-url' no habrá problemas para configurar upstreams para las sucursales locales. –

61

He encontrado que los submódulos no son relativos en git.

lo tanto, si desea mover un proyecto que contiene submódulos, tiene que editar el archivo .git en el sub-módulo, así como el atributo "worktree" en el archivo submódulo de configuración, que se almacena en el archivo de los padres .git/modules/MODULENAME/config .

+3

También tuve que editar 'MODULENAME/.git' que contenía un par clave-valor para' gitdir' –

+7

Esto debería ser la respuesta aceptada. – erikkallen

+0

En realidad, cambié estos valores a rutas relativas, usando ../ .. (cualquiera que sea necesario) de vuelta al directorio raíz del proyecto. – Uilleann

1

se puede mover el directorio de Git de una máquina a otra o decir, que desea migrar la carpeta del proyecto.

Toda la información sobre el origen se almacena en la carpeta '.git', que se crea cuando se inicializa un repositorio git en un directorio en su sistema.

Procedimiento

  1. : Mover la carpeta del proyecto a otra ubicación.
  2. : Si la carpeta del proyecto se está moviendo a una máquina nueva, cree el par de claves SSH correspondiente.
  3. : Dile a Git que está utilizando: git config --global user.email "your_git_email_id @ youremail"
8

Mostrar remoto actual (esto es, por supuesto, paso opcional):

$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
Tracked remote branches 
master 

lo que tenemos que hacer es quitar el origen actual y añadir uno nuevo:

$ git remote rm origin 
$ git remote add origin [email protected]:project.git 
$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
error: refs/remotes/origin/HEAD points nowhere! 
New remote branches (next fetch will store in remotes/origin) 
master 

no se preocupe por el error mostrado por el último comando. El primer tirón desde el origen lo arreglará:

$ git pull 
From [email protected]:project.git 
* [new branch]  master  -> origin/master 
Already up-to-date. 
$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
Tracked remote branches 
master 

todavía estoy fresco con Git así que tal vez es thre una mejor manera de hacerlo, pero esto funcionó para mí.

+1

Un gran consejo. Sin embargo, las sucursales locales no obtienen su conjunto ascendente a las ramas de seguimiento remoto del nuevo 'origen'. Pero, están los mensajes: 'No hay información de seguimiento para la rama actual. Especifique con qué rama desea fusionar. "Y una sugerencia:' Si desea establecer la información de seguimiento para esta rama, puede hacerlo con: git branch --set-upstream-to = origin/ master' –

Cuestiones relacionadas