Quiero clonar un repositorio GIT y NO terminar con un .git
directorio. En otras palabras, solo quiero los archivos. ¿Hay alguna forma de hacer esto?
git clone --no-checkout
hice exactamente lo contrario de lo que quiero (me dio solo el .git
directorio).
Estoy tratando de hacer eso para un repositorio remoto , no local, lo que significa que esto no es un duplicado de " Cómo hacer una" exportación git "(como" svn export ") " (aunque la solución podría terminar siendo la mismo).
git archive
ahora (Q4 2017) es más preciso y no incluirá carpetas vacías.Respuestas:
El comando git que sería el más cercano de lo que está buscando sería por
git archive
.Consulte el proyecto de copia de seguridad que utiliza git : incluirá en un archivo todos los archivos (incluidos los submódulos si está utilizando el
git-archive-all
script)Luego puede usar ese archivo en cualquier lugar, devolviéndole solo archivos, no
.git
directorio.Si necesita carpetas y archivos solo desde el primer nivel:
Para enumerar solo las carpetas de primer nivel de un repositorio remoto:
Nota: eso no funciona para GitHub (no compatible)
Por lo tanto, necesitaría clonar (poco profundo para acelerar el paso de clonación) y luego archivar localmente :
Otra opción sería hacer un clon superficial (como se menciona a continuación), pero ubicando la carpeta .git en otro lugar.
La carpeta repo incluiría solo el archivo, sin
.git
.Nota:
git --git-dir
es una opción del comandogit
, nogit clone
.Actualización con Git 2.14.X / 2.15 (Q4 2017): se asegurará de evitar agregar carpetas vacías .
Ver commit 4318094 (12 de septiembre de 2017) por René Scharfe (``) .
Sugerido por: Jeff King (
peff
) .(Fusionada por Junio C Hamano -
gitster
- en commit 62b1cb7 , 25 sep 2017)fuente
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
lo consigotar: This does not look like a tar archive
. ¿No funciona con GitHub? Además, ¿qué significa el@
?@
: lo he eliminado. Además, GitHub no admite un control remotogit archive
: he editado la respuesta para proponer una alternativa.tomado de aquí
fuente
--format=tar
es innecesario "tar" es el resultado predeterminado, no es necesario especificarlo.tar x
es suficientepuede crear un clon superficial para obtener solo las últimas revisiones:
entonces simplemente elimine el directorio .git o úselo
git archive
para exportar su árbol.fuente
¿Por qué no realizar un clon y luego eliminar el
.git
directorio para que solo tenga una copia de trabajo desnuda?Editar: ¿O de hecho por qué usar clon? Es un poco confuso cuando dices que quieres un repositorio git pero sin un
.git
directorio. Si quiere decir que solo quiere una copia de algún estado del árbol, ¿por qué no hacerlocp -R
en el shell en lugar del clon de git y luego eliminar el siguiente.git
?fuente
Parece que solo quieres una copia del código fuente. Si es así, ¿por qué no simplemente copiar el directorio y excluir el directorio .git de la copia?
fuente
git checkout -f
Hay otra forma de hacerlo dividiendo el repositorio del árbol de trabajo.
Este método es útil si necesita actualizar estos archivos git sin git de forma regular. Por ejemplo, lo uso cuando necesito revisar los archivos fuente y construir un artefacto, luego copio el artefacto en un repositorio diferente solo para su implementación en un servidor, y también lo uso al enviar el código fuente a un servidor cuando quiero código fuente para pagar y construir en el directorio www.
Haremos dos carpetas, una para el git y otra para los archivos de trabajo:
inicializar un repositorio de git desnudo:
Luego cree un gancho posterior a la recepción:
Edite la recepción posterior en su editor favorito:
Agregue esto como un control remoto:
Ahora, cada vez que ingrese a este repositorio desnudo, verificará el árbol de trabajo
/workingfiles/
. Pero en/workingfiles/
sí mismo no está bajo control de versiones; corrergit status
en/workingfiles/
dará el errorfatal: Not a git repository (or any parent up to mount point /data)
. Son solo archivos simples.A diferencia de otras soluciones, el
rm -r .git
comando no es necesario, por lo que si/workingfiles/
hay algún otro repositorio git, no tiene que preocuparse por el comando utilizado para eliminar los archivos git del otro repositorio.fuente