2012-09-16 20 views

Respuesta

18

Simplemente puede clonar el repositorio a otro directorio en la misma máquina:

git clone /bare/repo/dir.git 

El directorio actual se convertirá en un clon no desnuda de tu repositorio, y podrás conseguir una salida de la rama master automáticamente. Luego use los comandos usuales como git pull para actualizarlo según sea necesario.

Como beneficio adicional, esta operación es muy eficiente: si especifica un directorio local en git clone, git intentará compartir objetos entre esos dos repos mediante enlaces duros.

+0

¿Funciona esta operación para las actualizaciones? –

+0

¿Qué tipo de actualizaciones? El repositorio clonado es solo otro clon, por lo que su árbol de trabajo necesitaría ser actualizado usando 'git pull'. Si necesita que esto suceda automáticamente, puede organizar el gancho 'post-receive' del servidor para ejecutar un' git pull' en el clon. – user4815162342

+0

Oh, claro, obviamente. Estaba pensando en términos de "clonar" demasiado. –

8

que estaba buscando el enfoque "separado árbol de trabajo" (como se ve here):

git init --bare 

git config core.worktree /somewhere/else/ 
git config core.bare false 

git checkout -f 
+3

Tenga en cuenta que debe ejecutar el 'core.bare' antes de la línea' core.worktree', como se indica en los comentarios de esa publicación de blog (y lo he confirmado recientemente). De lo contrario, obtendrá el error 'fatal: core.bare y core.worktree no tienen sentido'. – craigpatik

+0

Raro, yo también: https://gist.github.com/joallard/8871673. Tal vez el comportamiento en Git cambió en algún momento? –

+0

Parece que está * cerca * de lo que necesito, pero su enlace está roto y los comandos dados anteriormente no se explican lo suficiente como para que pueda ajustarlos a mis necesidades. ¿Puedes arreglar el enlace y/o explicar qué está pasando allí? – Wildcard

3

Este es un riff de los otros 2 respuestas, pero llena el vacío para mi caso de uso - funciona para actualizar el repositorio desde el origen y verificar las sucursales y cualquier operación de git porque terminas con una comp lete git repo.

git clone /path/to/bare/repo /new/path/to/full/repo 
cd /new/path/to/full/repo 
git remote set-url origin [email protected]:swift/swift.git 

Después de la ejecución de estas 3 líneas de código que puede entonces git pull y git branch y git checkout some_branch y así sucesivamente, ya que ahora tiene un completo repositorio git normales conectado a tu repositorio remoto.

+0

, tu el único que mencionó some_branch, deberías dar más detalles. Estaba tratando específicamente de encontrar un ejemplo para la sucursal, y este estaba caliente en Google para la sucursal, y es parte de OQ. ... – blamb

1

Esto es como funciona:

$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir 
$ cd /path/to/workdir 
$ git checkout . 

Voilà!

Para información: git init reportará: Reinitialized existing Git repository in /path/to/existing-bare-repository. Pero ten confianza man git-init dice: Ejecutar git init en un repositorio existente es seguro. No sobrescribirá las cosas que ya están allí.

Lo mágico es que git init solo no hace que sus archivos aparezcan en el directorio de trabajo. Tienes que verificar el directorio raíz.

6

Un repositorio desnudo es simplemente el directorio .git de un directorio de trabajo y una entrada en el archivo de configuración local.Lo que hice a convertir un repositorio desnudo en un total de un es:

  • Crear un nuevo subdirectorio .git y mover todos los archivos desde el repositorio desnudo allí
  • Editar el archivo .git/config cambiar bare = true a bare = false
  • Consulte la rama que desea. Esto extrae todos los archivos del repositorio en el directorio de trabajo.

También podemos establecer el atributo oculto en el directorio .git en Windows, pero no en los archivos dentro del directorio.

+1

Funciona como un encanto. Ayudado a recuperar repositorios de la instalación de bitbucket. – ibai

+0

¡Owesome ..! esto funcionó totalmente para mí también – Olu

Cuestiones relacionadas