Tengo un repositorio git básico, pero necesito acceder y navegar por su contenido a través de ssh (en un administrador de archivos como la experiencia del usuario).
Supongo que podría clonarlo:
git clone -l <path_to_bare_repo> <new_normal_repo>
Sin embargo, mi repositorio tiene un tamaño de aproximadamente 20 GB y no tengo espacio para duplicarlo. ¿Hay alguna forma de convertir el repositorio básico en el lugar para terminar con una copia de trabajo en él?

.gitdirectorio y establece elbareparámetro en la configuración en falso, debería comportarse como un repositorio normal donde puedegit checkoutobtener sus archivos.git showygit cat-fileRespuestas:
Nota : Probé esto en un repositorio de 1 confirmación muy simple . Vuelva a verificar esto, lea las páginas de manual y siempre esté feliz de haber hecho una copia de seguridad antes de seguir los consejos que encontró en StackOverflow. (Retrocede, ¿verdad?)
Para convertir un
--barerepositorio en uno no vacío:.gitcarpeta en el nivel superior de su repositorio.HEAD branches config description hooks info objects refsetc.) al.gitque acaba de crear.git config --local --bool core.bare falsepara convertir el repositorio de git local a non-bare.master(o cualquiera que sea su rama principal) y todos sus archivos se eliminan y la eliminación se realiza por etapas. Eso es normal. Simplemente pague manualmentemaster, o haga unagit reset --hard, y ya está..git/configarchivo agregando una líneafetch = +refs/heads/*:refs/remotes/origin/*despuésurl = <...>en la[remote "origin"]sección. Degit fetchlo contrario , no veráorigin/masterlas ramas de otros orígenes.Estos pasos van en la dirección opuesta a esta pregunta , "git-convert normal to bare repository"; en particular, tenga en cuenta esta respuesta , que establece que los pasos anteriores (en, supongo, en cualquier dirección) son diferentes de hacer a
git-clone. Sin embargo, no estoy seguro de si eso es relevante para usted, pero lo mencionógit cloneen la pregunta.fuente
Tuve un escenario ligeramente diferente:
Solución:
.gitdirectorio:git clone --bare https://github.com/user/project .gitgit config --local --bool core.bare false.gitdesnudo de recompra no incluye un archivo 'index'.)git reset HEAD -- .que restaura el
.git/index.He transformado efectivamente un repositorio simple en uno no desnudo, al tiempo que conservo el contenido que había obtenido anteriormente.
El guión completo que he estado usando durante años incluye los pasos:
Pero reconozco que la solución aceptada (con el paso útil
git resetagregado por ADTC ) es más simple.fuente
.gitsubcarpeta en un árbol de trabajo (que sabe que es su repositorio) inicialmente hecha de un archivo (no git). No podría haber revisado un repositorio no desnudo, ya que la carpeta en la que estaba haciendo el pago no está vacía. Hacer el non-baregit clone --no-checkouten una subcarpeta me habría obligado a subir el.gitnivel. Hacer un clon desnudo me permitió crear directamente la.gitsubcarpeta donde la quería. Puede ver el guión aquí: github.com/VonC/compileEverything/blob/….git. Obtengo la.gitcopia a través de un clon simple, transformo esa.gitcarpeta en una no desnuda y hago unagit resetpara que git se dé cuenta de que el árbol de trabajo ya está allí. Eso es exactamente lo que hace github.com/VonC/compileEverything/blob/… .Para simplificar y combinar la información en las respuestas:
Hay tres diferencias que hacen que un repositorio simple sea diferente de una carpeta .git normal:
Entonces, simplemente puede mover su repositorio básico para que sea la subcarpeta .git de una nueva carpeta,
Cambiar core.bare:
Agregue una especificación de referencia de origen predeterminada para realizar
git fetchygit pushelegir los mismos valores predeterminados que de costumbre:Y genere el archivo de índice y el árbol de trabajo:
Recomiendo en
git checkoutlugar degit resetgenerar los archivos, en caso de que se ingrese accidentalmente en el lugar equivocado.fuente
La pregunta del póster original es acerca de no tener suficiente espacio para hacer las cosas de manera simple. Para aquellos que tienen suficiente espacio, la respuesta es mucho más simple:
fuente
Si tiene poco espacio en disco, será un problema expandir el árbol de trabajo convirtiéndolo en un repositorio normal, pero puede examinar el contenido de un repositorio sin convertirlo. Úselo
git cat-file -p <commit-sha>en cualquier confirmación para ver el árbol al que se refiere. Úselogit cat-file -p <blob-sha>para ver el contenido del archivo al que hace referencia el blob. Usegit show <sha>:pathdonde sha es una confirmación o un árbol para ver el contenido del blob en la ruta.fuente
cden repositorio desnudo y hacer(le dará un repositorio de git regular que se llama X)
fuente
Si no le importa trabajar en un árbol de trabajo diferente, entonces
Tenga en cuenta que esto no es un clon.
fuente
Push-to-Deploy
En lugar de convertir el control remoto simple en un repositorio estándar, puede usar el script posterior a la recepción en el directorio de enlaces para expandir el repositorio en un directorio de implementación.
Este es un buen ejemplo de cómo configurar Push-to-Deploy
Para facilitar la referencia, este es el ejemplo del contenido del script del enlace anterior. Implementará solo empujes desde la rama "maestra" a un directorio llamado "implementación" que está en el mismo nivel que el directorio principal del repositorio:
fuente