Tengo una copia de trabajo del proyecto, sin ningún metadato de control de origen. Ahora, me gustaría hacer el equivalente de git-clone en esta carpeta y mantener mis cambios locales.
git-clone no me permite clonar en una carpeta existente. ¿Cuál es la mejor práctica aquí?

Respuestas:
Esto se puede hacer clonando a un nuevo directorio, luego moviendo el
.gitdirectorio a su directorio existente.Si su directorio existente se llama "código".
Esto también se puede hacer sin realizar un pago durante el comando clonar; Más información se puede encontrar aquí .
fuente
git clonecomo primer comando, no se necesita más comando de pago. Si en su lugar usa algo comogit clone --no-checkouten ese primer paso, luego de mover el directorio .git será necesario usarlogit reset HEADpara decirle a git que los archivos no se han eliminado.git status.No clones, busca en su lugar. En el repositorio:
Luego puede restablecer el árbol para obtener la confirmación que desea:
y eres como clonado
La pregunta interesante aquí (y la que no tiene respuesta): cómo averiguar en qué compromiso se basó su árbol desnudo, por lo tanto, en qué posición restablecer.
fuente
Lo siguiente que hice, para pagar la rama maestra en un directorio existente:
fuente
-tse usa la bandera aquí?Me gustaría
git clonea un nuevo directorio y copiar el contenido del directorio existente al nuevo clon.fuente
git clone wherever tmp && git mv tmp/.git . && rm -rf tmpEn otras palabras, mover el.gitdirectorio de un clon temporal parece más simple que limpiar el árbol de trabajo del clon y copiar los archivos existentes allí.git mv tmp/.git .regresafatal: cannot move directory over file, source=tmp/.git, destination=.gitpor mí. Alguien sabe cuál es el problema?mv, nogit mv; aunque esto no explica por qué ya tiene un.gitarchivo allí (que contienegitdir: some/path/to/a/git-dirun "archivo git"; si no estuviera allí, entonces lo habría vistofatal: Not a git repository (or any of the parent directories): .git).El uso de un directorio temporal está bien, pero esto funcionará si desea evitar ese paso. Desde la raíz de su directorio de trabajo:
fuente
git reset --hard origin/mastereliminará todos los archivos locales.hardymixedes que mixto mantendrá los cambios locales (por lo tanto, si luego intentas tirar, te mostrará, por ejemplo, no se puede tirar con rebase: tienes cambios no organizados. Compruébalo o guárdalos ) , aunque difícil descartará esos cambios localesfuente
git reset --hardeliminará los cambios en el archivo local, específicamente NO lo que solicitó este OP.--mixeddebería usarse en su lugar.Para clonar un repositorio git en un directorio existente vacío, haga lo siguiente:
Observe el
.al final de sugit clonecomando. Eso descargará el repositorio en el directorio de trabajo actual.fuente
fatal: destination path '.' already exists and is not an empty directory.Muchas respuestas ya para hacerlo de la manera en que lo solicitó el OP. Pero vale la pena señalar que hacerlo al revés es mucho más simple:
Ahora tiene el estado objetivo deseado: clon fresco + cambios locales.
fuente
Hay dos enfoques para esto. Siempre que sea posible, comenzaría con una carpeta limpia para su nuevo directorio de trabajo de git y luego copiaría su versión de las cosas más adelante. Esto podría parecerse a *:
En este punto, debe tener una copia de trabajo bastante limpia con su carpeta de trabajo anterior como el directorio de trabajo actual, por lo que cualquier cambio que incluya la eliminación de archivos aparecerá en el radar si ejecuta
git status.Por otro lado, si realmente debe hacerlo al revés, puede obtener el mismo resultado con algo como esto:
De cualquier manera, lo primero que haría es ejecutar algo como
git stashobtener una copia de todos sus cambios locales, luego puede volver a aplicarlos y determinar a través de cuáles desea comprometerse.* Ambos ejemplos asumen que comienzas en el shell en el directorio principal de tu proyecto.
fuente
Este es el mejor de todos los métodos que encontré
Clone solo la carpeta .git del repositorio (excluyendo archivos ya que están en
existing-dir) en un directorio temporal vacíogit clone --no-checkout repo-path-to-clone existing-dir/existing-dir.tmp// podría querer --no-hardlinks para clonar repositorio localMueva la carpeta .git al directorio con los archivos. Esto hace
existing-dirun repositorio git.mv existing-dir/existing-dir.tmp/.git existing-dir/Eliminar el directorio temporal
rmdir existing-dir/existing-dir.tmpcd existing-dirGit piensa que todos los archivos se eliminan, esto revierte el estado del repositorio a HEAD.
ADVERTENCIA: cualquier cambio local en los archivos se perderá.
git reset --mixed HEADfuente
Si está utilizando al menos git 1.7.7 (que enseñó
clonela--configopción), para convertir el directorio actual en una copia de trabajo:Esto funciona por:
.gitcarpeta--mirrorconvierte el nuevo clon en una carpeta puramente de metadatos como.gitnecesario--config core.bare=falsecontradice lo implícitobare=truede la--mirroropción, permitiendo así que el repositorio tenga un directorio de trabajo asociado y actúe como un clon normalObviamente, esto no funcionará si
.gitya existe un directorio de metadatos en el directorio que desea convertir en una copia de trabajo.fuente
[core]sección de la configuración local que incluye ambosbare = trueybare = false. Más problemático es que tendrá valores incorrectos para elorigincontrol remoto, con la[remote "origin"]sección incluidamirror = truey una especificación de búsqueda que no funcionará correctamente con una copia de trabajo. Después de solucionar estos problemas, clonar normalmente y mover las nuevas copias de trabajo.githabrá sido más eficiente.Por lo general, clonaré primero el repositorio inicial y luego moveré todo el contenido de la carpeta existente al repositorio inicial. Funciona todo el tiempo.
La ventaja de este método es que no se perderá nada del repositorio inicial, incluido README o .gitignore.
También puede usar el siguiente comando para finalizar los pasos:
fuente
Puede hacerlo escribiendo las siguientes líneas de comando de forma recursiva:
fuente
Solo usa el. al final del
git clonecomando (estar en ese directorio), así:fuente