mac - git repository
¿Cuál es la mejor práctica para "clonar git" en una carpeta existente? (12)
Esto se puede hacer clonando a un nuevo directorio, luego moviendo el directorio .git
a su directorio existente.
Si su directorio existente se llama "código".
git clone https://myrepo.com/git.git temp
mv temp/.git code/.git
rm -rf temp
Esto también se puede hacer sin realizar una comprobación durante el comando de clonación; Más información se puede encontrar here .
Tengo una copia de trabajo del proyecto, sin ningún tipo de metadatos 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í?
Hay dos enfoques para esto. Donde 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 puede parecer algo como *:
cd myfolder
git clone https://myrepo.com/git.git .
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 el git status
.
Por otro lado, si realmente debes hacerlo al revés, puedes obtener el mismo resultado con algo como esto:
mv $dir $dir.orig
git clone $url $dir
rsync -av --delete --exclude ''.git'' $dir.orig/ $dir/
rm -rf $dir.orig
De cualquier manera, lo primero que haría es ejecutar algo como git stash
para obtener una copia de todos los cambios locales que ha dejado de lado, luego puede volver a aplicarlos y trabajar con los que desea comprometerse.
* Ambos ejemplos suponen que comienzas en el shell en el directorio principal de tu proyecto.
Lo siguiente hice, para verificar la rama maestra en un directorio existente:
git init
git remote add origin [my-repo]
git fetch
git checkout origin/master -ft
Me gustaría git clone
a un nuevo directorio y copiar el contenido del directorio existente al nuevo clon.
Muchas respuestas ya lo hacen de la manera que pidió el OP. Pero vale la pena señalar que hacerlo al revés es mucho más simple:
git clone repo-url tmp/
cp -R working/ tmp/
Ahora tiene el estado de destino deseado: clone fresco + cambios locales.
No clonar, buscar en su lugar. En el repositorio:
git init
git remote add origin $url_of_clone_source
git fetch origin
git checkout -b master --track origin/master # origin/master is clone''s default
Luego, puede restablecer el árbol para obtener la confirmación que desea:
git reset origin/master # or whatever commit you think is proper...
y eres como has clonado.
La pregunta interesante aquí (y la que no tiene respuesta): cómo saber en qué comisión se basó su árbol desnudo, por lo tanto, en qué posición reiniciar.
Para clonar un repositorio git en un directorio existente vacío, haga lo siguiente:
cd $dir
git clone --no-checkout $url tempdir
mv tempdir/.git .
rmdir tempdir
git reset --mixed HEAD
Observe el .
al final de su comando git clone
. Eso descargará el repositorio en el directorio de trabajo actual.
Por lo general, primero clonaré el repositorio inicial y luego moveré todo en la carpeta existente al repositorio inicial. Funciona todo el tiempo.
La ventaja de este método es que no perderá nada del repositorio inicial, incluidos README o .gitignore.
También puedes usar el siguiente comando para finalizar los pasos:
$ git clone https://github.com/your_repo.git && mv existing_folder/* your_repo
Si está utilizando al menos git 1.7.7 (que enseñó a clone
la opción --config
), para convertir el directorio actual en una copia de trabajo:
git clone example.com/my.git ./.git --mirror --config core.bare=false
Esto funciona por:
- Clonando el repositorio en una nueva carpeta
.git
-
--mirror
convierte el nuevo clon en una carpeta de metadatos.git
como.git
debe ser -
--config core.bare=false
el implícitobare=true
de la opción--mirror
, permitiendo así que el repositorio tenga un directorio de trabajo asociado y actúe como un clon normal
Obviamente, esto no funcionará si ya existe un directorio de metadatos .git
en el directorio que desea convertir en una copia de trabajo.
Usar un directorio temporal está bien, pero esto funcionará si quiere evitar ese paso. Desde la raíz de su directorio de trabajo:
$ rm -fr .git
$ git init
$ git remote add origin your-git-url
$ git fetch
$ git reset --mixed origin/master
Este es el mejor de todos los métodos que encontré
Clone solo la carpeta .git del repositorio (excluyendo los archivos que ya están en existing-dir
) en un directorio temporal vacío
-
git clone --no-checkout repo-path-to-clone existing-dir/existing-dir.tmp
// puede querer --no-hardlinks para clonar el repositorio local
Mueva la carpeta .git al directorio con los archivos. Esto hace de existing-dir
un git repo.
-
mv existing-dir/existing-dir.tmp/.git existing-dir/
Eliminar el directorio temporal
rmdir existing-dir/existing-dir.tmp
cd existing-dir
Git piensa que todos los archivos se eliminan, esto revierte el estado del repositorio a HEAD.
ADVERTENCIA: cualquier cambio local a los archivos se perderá.
-
git reset --hard HEAD
git clone your_repo tmp && mv tmp/.git . && rm -rf tmp && git reset --mixed