2009-05-21 17 views
15

Acabo de terminar de navegar por los resultados de búsqueda de Google que contienen todos los correos electrónicos acerca de cuán estúpido es que git no pueda clonar un repositorio vacío. Algún alma amable incluso envió un parche. Hasta que se actualice git, ¿cuál es el método más sencillo y directo para clonar un repositorio vacío de descubierto git?¿Cuál es la forma más directa de clonar un repositorio vacío, * bare * git?

La solución ideal será compatible con la opción -o para dar el repositorio remoto un nombre distinto de origin, y será implementable como una secuencia de comandos shell simple, por ejemplo, git-clone-empty-repo.

(Por qué quiero hacer esto: He creado un repositorio de git vacío y vacío en nuestro archivador de NetApp, donde se realizará una copia de seguridad, pero quiero trabajar con un clon en mi disco duro local y presionar y tire hacia atrás y hacia delante Otras personas con las que trabajo va a estar haciendo lo mismo que yo crío nuevos repositorios git mucho y mi incapacidad para clonar un repo vacío me vuelve loco)


EDITAR:... el hilo de VonC sugiere que

$ git-init 
$ git-remote add origin server:/pub/git/test.git 

es equivalente a clon ing el repositorio remoto cuando el repositorio está vacío. Esto no es exactamente lo que quiero porque siempre uso la opción -o con git clone; Nombro el repositorio remoto según la máquina en la que esté o algún otro criterio memorable. (Tengo demasiados repositorios para mantenerlos recta si todos están llamados origin.)


EDITAR: La siguiente respuesta estará marcado aceptado :-)

Para clonar un vacío, al descubierto rEPO en ruta,

  1. Tenga en ~/git/onefile un repositorio git no desnudo que contiene un archivo inocuo como .gitignore. (Alternativamente, crear un repo tales dinámicamente.)
  2. (cd ~/git/onefile; git pushcaminomaster)
  3. git clone -onombrecamino

En otras palabras, no intente para clonar el repositorio vacío, sino después de crearlo, presione un repositorio simple que contenga un archivo inocuo. Entonces ya no está vacío y puede ser clonado.

Si alguien no me pega, publicaré un script de shell.

+0

añadido una forma de transformar un repositorio de "casi vacío" en un "casi vacío" ** ** desnudo repositorio, conforme a lo solicitado – VonC

+1

Creo que los soportes modernos clonación repositorio vacío, o en el futuro git apoyarían clonación repositorio vacío –

+0

La versión 1.5.6.5, actual en Debian, no clona un repositorio emty, bare. –

Respuesta

11

puede ser sólo tiene un repositorio git con el número mínimo de archivos en ella:

uno: .gitignore con evidente patrones de ignorar en el mismo.

Y luego clone ese repositorio "casi vacío".
Tenga en cuenta que un repositorio "casi vacío" ("casi" porque todavía tiene un directorio de trabajo mínimo junto con el directorio .git) puede entonces por 'git clone --bare' (como illustrated here), convirtiéndolo en un verdadero repositorio vacío (pero no "vacío")
esto es que repo desnuda que pueda entonces:

  • clon de todas partes que desea.
  • o (lo más importante) empuje a (ya que es un acuerdo de recompra desnuda)

Tienes en this thread un buen resumen del "revés" (que sigo aquí por referencia).

$ git-init 
$ git-remote add origin server:/pub/git/test.git 

para un nuevo proyecto (sin código aún) que quería hacer un vacío, desnudo
repositorio (sin copia de trabajo) en un servidor público a distancia como un
punto de partida, el clon de forma local, y cree gradualmente contenido localmente y
empújelo al servidor público remoto.

A lo que respondieron Junio ​​Hamano C:

Se preparó un repositorio desnudo vacío para su publicación, y que es muy bueno.

El siguiente paso es que prepare sus contenidos en otro lugar. Ese sería su lugar de trabajo privado, es decir, el lugar donde normalmente trabajaría en ).
Empuja desde su lugar de trabajo privado a ese repositorio de publicación.
Su lugar de trabajo es donde debe venir el compromiso inicial, ya que usted es el que está iniciando el proyecto .

Tenga en cuenta que el lugar de trabajo privado no tiene que ser un clon del vacío. Eso en realidad está al revés. Su trabajo comenzó desde su lugar de trabajo privado hasta el de publicación.

Incluso se puede clonar su repositorio privado a la publicación de una para que quede claro que es el maestro y quién es la copia si quisiera, sino porque ya tiene el repositorio desnudo para publicación, simplemente empujando hacia es todo lo que se necesita.

+0

Estoy creando un repositorio * bare * git por lo que no hay * directorio de trabajo *. ¿Quizás necesito un repositorio estándar "casi vacío" en un lugar estándar que luego pueda enviar a un repositorio vacío? –

+0

Pero una vez que crea un repositorio "casi vacío", puede 'git clone --bare' y convertirlo en un verdadero repositorio desnudo (http://stackoverflow.com/questions/738154/what-does-git-updating- currently-checked-out-branch-warning-mean) – VonC

+0

Si creamos un repositorio casi vacío, puedo simplemente pasar de él a un repositorio nuevo recién inicializado. Si no le importa quitarle el cruxt extra a su respuesta, podría votarlo de nuevo :-) –

Cuestiones relacionadas