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?
.git
directorio y establece elbare
parámetro en la configuración en falso, debería comportarse como un repositorio normal donde puedegit checkout
obtener sus archivos.git show
ygit cat-file
Respuestas:
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
--bare
repositorio en uno no vacío:.git
carpeta en el nivel superior de su repositorio.HEAD branches config description hooks info objects refs
etc.) al.git
que acaba de crear.git config --local --bool core.bare false
para 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/config
archivo agregando una líneafetch = +refs/heads/*:refs/remotes/origin/*
despuésurl = <...>
en la[remote "origin"]
sección. Degit fetch
lo contrario , no veráorigin/master
las 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 clone
en la pregunta.fuente
Tuve un escenario ligeramente diferente:
Solución:
.git
directorio:git clone --bare https://github.com/user/project .git
git config --local --bool core.bare false
.git
desnudo 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 reset
agregado por ADTC ) es más simple.fuente
.git
subcarpeta 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-checkout
en una subcarpeta me habría obligado a subir el.git
nivel. Hacer un clon desnudo me permitió crear directamente la.git
subcarpeta donde la quería. Puede ver el guión aquí: github.com/VonC/compileEverything/blob/….git
. Obtengo la.git
copia a través de un clon simple, transformo esa.git
carpeta en una no desnuda y hago unagit reset
para 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 fetch
ygit push
elegir los mismos valores predeterminados que de costumbre:Y genere el archivo de índice y el árbol de trabajo:
Recomiendo en
git checkout
lugar degit reset
generar 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>:path
donde sha es una confirmación o un árbol para ver el contenido del blob en la ruta.fuente
cd
en 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