git clone git-bare

¿Cuál es la forma más sencilla de clonar un repositorio vacío,*bare*git?



clone git-bare (1)

Acabo de terminar de navegar por los resultados de búsqueda de Google que contienen todos los comentarios del correo electrónico sobre lo estúpido que es que Git no pueda clonar un repositorio vacío. Algún alma amable incluso presentó un parche Hasta que se actualice git, ¿cuál es el método más simple y directo para clonar un repositorio de git vacío y simple?

La solución ideal será compatible con la opción -o para dar al repositorio remoto un nombre que no sea origin , y se podrá implementar como un simple script de shell, por ejemplo, git-clone-empty-repo .

(Por qué quiero hacer esto: he configurado un repositorio git vacío en nuestro archivador NetApp donde se realizará una copia de seguridad, pero quiero trabajar con un clon en mi disco duro local y empujar y tirar hacia atrás y adelante . Otras personas con las que trabajo harán lo mismo. Creo muchos nuevos repositorios de git y mi incapacidad para clonar un repositorio vacío me vuelve loco.

EDIT : hilo de VonC sugiere que

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

es equivalente a clonar 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 de acuerdo con la máquina en la que se encuentra o algún otro criterio memorable. (Tengo demasiados repositorios para mantenerlos en orden si a todos se les llama origin ).

EDITAR : La siguiente respuesta será marcada como aceptada :-)

Para clonar un repo vacío, desnudo en el camino ,

  1. Mantenga en ~/git/onefile un repositorio de git no desnudo que contenga un archivo inocuo como .gitignore . (Alternativamente, cree un repo dinámicamente).
  2. (cd ~/git/onefile; git push path master)
  3. git clone -o nombre ruta

En otras palabras, no intente clonar el repositorio vacío, sino que, 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 gana, publicaré un script de shell.


Puede ser solo tener un repositorio git con el número mínimo de archivos en él:

uno: .gitignore con obvio ignorar patrones en él.

Y luego clonar ese repositorio "casi vacío".
Tenga en cuenta que tal repositorio "casi vacío" ("casi" porque todavía tiene un directorio de trabajo mínimo junto con el directorio .git) puede entonces '' git clone --bare '' (como se ilustra aquí ), lo que lo convierte en un verdadero repositorio simple ( pero no uno "vacío".
Este es el repositorio que puedes:

  • Clona donde quieras.
  • o (lo que es más importante) presionar para (ya que es un repositorio simple)

Tiene en este hilo un buen resumen de "al revés" (que guardo aquí como referencia).

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

Para un nuevo proyecto (sin código todavía) quería hacer un vacío, desnudo
repositorio (sin copia de trabajo) en un servidor público remoto como un inicio
apunte, clone localmente, y gradualmente cree contenido localmente y
empujarlo hacia el servidor remoto, público.

A lo que respondió Junio ​​C Hamano:

Usted preparó un repositorio vacío para la publicación, y eso es muy bueno.

El siguiente paso es que prepares tus contenidos en otro lugar. Ese sería su lugar de trabajo privado, es decir, el lugar en el que trabajaría normalmente).
Empujas desde tu lugar de trabajo privado a ese repositorio de publicaciones.
Su lugar de trabajo es de donde debe provenir el compromiso inicial, ya que usted es quien 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 es al revés. Tu trabajo comenzó desde tu lugar de trabajo privado hasta el de publicación.

Incluso podría clonar su repositorio privado para publicar uno para dejar en claro quién es el maestro y quién es la copia si lo desea, pero como ya tiene el repositorio para la publicación, basta con presionarlo para que sea todo lo que necesite.