¿Cómo puedo convertir un repositorio Git 'normal' en uno desnudo?
La principal diferencia parece ser:
en el repositorio normal de Git, tiene una
.git
carpeta dentro del repositorio que contiene todos los datos relevantes y todos los demás archivos que componen su copia de trabajoen un repositorio Git desnudo, no hay una copia de trabajo y la carpeta (llamémosla
repo.git
) contiene los datos reales del repositorio
mv repo/.git repo.git; rm -rf repo
&&
lugar de;
en caso de quemv
falle!Respuestas:
En resumen: reemplace el contenido de
repo
con el contenido derepo/.git
, luego dígale al repositorio que ahora es un repositorio desnudo.Para hacer esto, ejecute los siguientes comandos:
Tenga en cuenta que esto es diferente de hacer
git clone --bare
una nueva ubicación (ver más abajo).fuente
core.bare
. Ahora, después de buscar en Google esta opción, puedo confirmarla: kernel.org/pub/software/scm/git-core/docs/git-config.htmlgit clone --bare /path/to/repo
).rm
comando puede necesitar en* \.[!.]*
lugar de*
eliminar archivos de puntos y directorios de puntos.Parece que su método funcionaría; La estructura de archivos de un repositorio simple es justo lo que está dentro del directorio .git. Pero no sé si alguno de los archivos se cambia realmente, por lo que si eso falla, simplemente puede hacer
Probablemente necesitará hacerlo en un directorio diferente para evitar un conflicto de nombres, y luego puede moverlo nuevamente a donde desee. Y es posible que deba cambiar el archivo de configuración para que apunte a donde esté su repositorio de origen.
fuente
git clone --bare /path/to/repo.git /path/to/newbarerepo.git
git update-server-info
en el repositorio desnudo después de la creación.Creo que el siguiente enlace sería útil
GitFaq: ¿Cómo hago desnudo el repositorio no descubierto existente?
fuente
git clone
) tiene los inconvenientes que nosatalian mencionó anteriormente.A menos que específicamente desee o necesite girar bits en el sistema de archivos, realmente es muy sencillo crear una versión desnuda de un repositorio no desnudo (mencionado en varias otras publicaciones aquí). Es parte de la funcionalidad principal de git:
git clone --bare existing_repo_path bare_repo_path
fuente
Por favor también considere usar
De la documentación :
fuente
clone
). ¿Me estoy perdiendo de algo? ¿Fue--mirror
una adición relativamente reciente?--mirror
está disponible desde la versión 1.7, por lo que ya es bastante largo. Puedes ver aquíSolo quería pasar a un repositorio en una ruta de red, pero git no me dejaba hacer eso a menos que ese repositorio estuviera marcado como vacío. Todo lo que necesitaba era cambiar su configuración:
No es necesario jugar con los archivos a menos que desee mantenerlo limpio.
fuente
He leído las respuestas y he hecho esto:
esto dejará el contenido
repos/.git
como desnudorepos.git
fuente
Esto es lo que creo que es más seguro y simple. No hay nada aquí no mencionado anteriormente. Solo quiero ver una respuesta que muestre un procedimiento seguro paso a paso. Comienza una carpeta desde el repositorio (repositorio) que desea dejar al descubierto. Adopté la convención implícita arriba de que las carpetas de repositorio desnudas tienen una extensión .git.
fuente
Simplemente lee
Pro Git Book: 4.2 Git en el servidor - Obtener Git en un servidor
que se reducen a
Luego ponga my_project.git en el servidor
Lo cual es principalmente, qué respuesta # 42 trató de señalar. Shurely uno podría reinventar la rueda ;-)
fuente
Aquí hay una pequeña función BASH que puede agregar a su .bashrc o .profile en un sistema basado en UNIX. Una vez agregado y el shell se reinicia o el archivo se vuelve a cargar mediante una llamada a
source ~/.profile
osource ~/.bashrc
.Una vez llamado dentro de un directorio que contiene un directorio .git, realizará los cambios apropiados para convertir el repositorio. Si no hay un directorio .git presente cuando se llama, aparecerá un mensaje de FALLA y no se producirán cambios en el sistema de archivos.
fuente
Los métodos que dicen eliminar archivos y perder el tiempo moviendo el directorio .git no están limpios y no usan el método "git" para hacer algo que debería ser simple. Este es el método más limpio que he encontrado para convertir un repositorio normal en un repositorio simple.
Primer clon / ruta / a / normal / repo en un repositorio desnudo llamado repo.git
Luego, elimine el origen que apunta a / ruta / a / normal / repo
Finalmente puedes eliminar tu repositorio original. Puede cambiar el nombre de repo.git a repo en ese punto, pero la convención estándar para indicar un repositorio git es algo.git, por lo que personalmente lo dejaría de esa manera.
Una vez que haya hecho todo eso, puede clonar su nuevo repositorio desnudo (que en efecto crea un repositorio normal, y también es cómo lo convertiría de desnudo a normal)
Por supuesto, si tiene otras fuentes ascendentes, tendrá que anotarlas y actualizar su repositorio para incluirlo. Pero de nuevo, todo se puede hacer con el comando git. Recuerda que las páginas del manual son tu amigo.
fuente
.git
carpeta. Es muy educativo aprender cómo encajan las partes.En caso de que tenga un repositorio con pocas sucursales / referencias / encabezados de pago local / pocas sucursales remotas remotas / origen / * Y si desea convertir esto en un repositorio BARE con todas las sucursales en / refs / heads / *
Puede hacer lo siguiente para guardar el historial.
fuente
Usé el siguiente script para leer un archivo de texto que tiene una lista de todos mis repositorios SVN y convertirlos a GIT, y luego usar git clone --bare para convertir a un repositorio git desnudo
list.txt tiene el formato
y users.txt tiene el formato
www-data es el usuario del servidor web Apache, se necesita permiso para impulsar los cambios a través de HTTP
fuente
Aquí está la definición de un repositorio simple de gitglossary :
Llegué aquí porque estaba jugando con un "repositorio local" y quería poder hacer lo que quisiera como si fuera un repositorio remoto. Solo estaba jugando, tratando de aprender sobre git. Asumiré que esta es la situación para quien quiera leer esta respuesta.
Me encantaría que un dictamen pericial o algunos contraejemplos específicos, sin embargo, parece que (después de hurgar en algún código fuente de Git que he encontrado) simplemente ir al archivo
.git/config
y establecer el núcleo de atributos al descubierto al verdadero , Git le permitirá hacer lo que sea desea hacer al repositorio de forma remota. Es decir, las siguientes líneas deberían existir en.git/config
:(Esto es aproximadamente lo que el comando
git config --bool core.bare true
hará , que probablemente se recomienda para hacer frente a situaciones más complicadas)Mi justificación para esta afirmación es que, en el código fuente de git, parece haber dos formas diferentes de probar si un repositorio está vacío o no. Una es al verificar una variable global
is_bare_repository_cfg
. Esto se establece durante alguna fase de configuración de la ejecución y refleja el valor encontrado en el.git/config
archivo. El otro es una funciónis_bare_repository()
. Aquí está la definición de esta función:No tengo el tiempo ni la experiencia para decir esto con absoluta confianza, pero por lo que pude decir si tiene el
bare
conjunto de atributos quetrue
en.git/config
esto siempre debe devolver1
. El resto de la función probablemente sea para la siguiente situación:Experimentaré con él cuando pueda más tarde, pero esto parecería indicar que configurar core.bare = true es equivalente a eliminar core.bare del archivo de configuración y configurar los directorios correctamente.
En cualquier caso, configurar core.bare = true ciertamente le permitirá avanzar, pero no estoy seguro de si la presencia de archivos de proyecto hará que algunas otras operaciones salgan mal. Es interesante y supongo que es instructivo ir al repositorio y ver qué sucedió localmente (es decir, ejecutar
git status
y dar sentido a los resultados).fuente
Primero,
backup
tu repositorio existente:En segundo lugar, ejecute lo siguiente:
fuente
Oneliner por hacer todas las operaciones anteriores:
(no me culpes si algo explota y no tienes copias de seguridad: P)
fuente
Wow, es simplemente sorprendente cuántas personas intervinieron en esto, especialmente teniendo en cuenta que no parece que ninguno se haya detenido a preguntar por qué esta persona está haciendo lo que está haciendo.
La ÚNICA diferencia entre un repositorio git desnudo y no desnudo es que la versión no desnuda tiene una copia de trabajo. La razón principal por la que necesitaría un repositorio simple es si desea ponerlo a disposición de un tercero, en realidad no puede trabajar directamente en él, por lo que en algún momento tendrá que clonarlo en ese momento de vuelta a una versión de copia de trabajo normal.
Dicho esto, para convertir a un repositorio simple, todo lo que tiene que hacer es asegurarse de que no tiene compromisos pendientes y luego simplemente:
Ahí tienes, repositorio desnudo.
fuente
git config core.bare true
lo mismo.git config core.bare true
, al igual que en esta respuesta .