2010-05-27 9 views
7

Duplicar posible:
How to convert a git repository from normal to bare ?¿Cómo puedo hacer que un repositorio de git no desnudo sea uno simple?

Me gustaría hacer un acuerdo de recompra en una cesión temporal al descubierto que la gente pueda empujar a ella con grandes advertencias desagradables fuera. Podría borrarlo y clonarlo de nuevo ... ¿pero quizás hay una manera más elegante?

+0

¿Debería llamar a estos repositorios simples o repositorios dispersos? –

+0

git los llama repositorios 'desnudos', como en 'git clone --bare'. – Peter

+0

gracias :) editar: s/sparse/bare/g –

Respuesta

10

Probablemente sea mejor simplemente eliminar y volver a clonar. Ejemplo:

mv old_git_repo/ /tmp/ 
git clone --bare /tmp/old_git_repo/ new_git_repo/ 

También puedes, simplemente eliminar los archivos de trabajo y promover .git/*-.. Sin embargo, también había necesidad de añadir y quitar bare = truelogallrefupdates = true en la nueva sección de [core] desnuda config 's (antes .git/config Se podría hacer un script para hacer esto de forma automática si se quiere

Editar:.. Usted ha mencionado en un comentario de que esto fue clonado de svn, por lo que un nuevo clon tardará mucho tiempo. Pero no clonar desde svn! Simplemente clonar desde el nuevo repositorio de git, y será git -> git, que será rápido. mi nota anterior sobre simplemente mover los archivos.

+1

En segundo lugar la recomendación de clonar (git-> git, no svn-> git, por supuesto). Siempre es mejor evitar meterse dentro de '.git' si puedes, aunque esta es una manipulación bastante simple. – Cascabel

+0

Aparece un error de "Demasiados argumentos" cuando ejecuto 'git clone --bare/path/to/existing_repo/path/to/new_repo'. También lo intenté con un '/ .git' posterior en el primer argumento. –

1

Un repositorio desnudo es simplemente un directorio .git sin el directorio de trabajo. Así que simplemente puede reemplazar el directorio del proyecto con el conte nts of .git y debería funcionar:

mv /path/to/projectdir /path/to/projectdir.old 
mv /path/to/projectdir.old/.git /path/to/projectdir 
rm -rf /path/to/projectdir 
+1

También debe establecer la opción de configuración 'core.bare' en un valor verdadero. Pero, probablemente sea mejor simplemente usar 'git clone --bare'. –

+0

Tiene razón, también se necesita un comando "git config core.bare 1". ¡Gracias por la corrección! – gyim

+3

¿No debería ser la tercera línea 'rm -rf/path/to/projectdir.old'? Está guardando el directorio de trabajo y tirando la base de datos de git. –

Cuestiones relacionadas