Tengo el directorio A con archivos que coinciden con el directorio B. El directorio A puede tener otros archivos necesarios. El directorio B es un repositorio git.
Quiero clonar el directorio B en el directorio A pero git-clone no me lo permite ya que el directorio no está vacío.
Esperaba que solo clonara .git y, dado que todos los archivos coinciden, ¿podría ir desde allí?
No puedo clonar en un directorio vacío porque tengo archivos en el directorio A que no están en el directorio B y quiero conservarlos.
Copiar .git no es una opción, ya que quiero que los refs empujen / tiren y no quiero configurarlos manualmente.
¿Hay alguna forma de hacer esto?
Actualización: creo que esto funciona, ¿alguien puede ver algún problema? ->
cd a
git clone --no-hardlinks --no-checkout ../b a.tmp
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this
Respuestas:
Esto funcionó para mí:
NOTA:
-t
establecerá la rama ascendente para usted, si eso es lo que desea, y generalmente lo es.fuente
git reset origin/master
después degit fetch
eso, funcionará (también preservando cualquier cambio local).git checkout ...
git se queja de que todos mis archivos se sobrescribirán y debería moverlos primero. Cuando hago `git reset origin / master /` primero, el comando de pago se queja de que ya existe una rama llamada master.git checkout master
Fue un paso final suficiente para mí.fatal: A branch named 'master' already exists
. Creo que realmente no lo necesitaba.En los siguientes comandos de shell
existing-dir
hay un directorio cuyo contenido coincide con los archivos rastreados en elrepo-to-clone
repositorio de git.fuente
git reset --hard HEAD
o no se daría por vencido en los archivos "eliminados".git reset HEAD
funcionó bien para mígit reset --hard HEAD
destruye cualquier cambio en sus archivos, por lo que si no son exactamente los mismos que los archivos en el repositorio, no debe hacer eso.git reset HEAD
No parece tener ningún efecto para mí.git reset --hard HEAD
sí, pero eso pierde cualquier cambio que haya realizado en los archivos. ¿Hay una mejor solución?Una ligera modificación a una de las respuestas que me funcionó:
para comenzar a trabajar en la rama maestra de inmediato.
fuente
git branch --set-upstream-to=origin/master master
.Advertencia: esto podría sobrescribir los archivos.
Modificado de la respuesta de @ cmcginty - sin el -f no funcionó para mí
fuente
git checkout .
?Esto es lo que terminé haciendo cuando tuve el mismo problema (al menos creo que es el mismo problema). Entré en el directorio A y corrí
git init
.Como no quería que los archivos en el directorio A fueran seguidos por git, edité .gitignore y agregué los archivos existentes. Después de esto corrí
git remote add origin '<url>' && git pull origin master
et voíla, B es "clonado" en A sin un solo contratiempo.fuente
Lo he usado hace unos momentos, requiere los comandos menos potencialmente destructivos:
¡Y voilá!
fuente
Otra receta simple parece funcionar bien para mí:
Mi principal caso de uso para revisar un directorio con archivos existentes es controlar mis archivos de puntos Unix con Git. En una cuenta nueva, el directorio de inicio ya tendrá algunos archivos, posiblemente incluso los que quiero obtener de Git.
fuente
.git/config
archivo indica que los repos están vacíos. 2.) Los archivos normalmente almacenados.git
se almacenan en la raíz (que usted llamó.git
).git
y configuracióncore.bare
afalse
se hará cargo de, por lo que todavía me siento bien acerca de este método.Esto funcionó para mí:
fuente
Tuve un problema similar con un nuevo directorio web de Apache (cuenta creada con WHM) que planeaba usar como servidor web provisional. Necesitaba clonar inicialmente mi nuevo proyecto con la base de código allí e implementar periódicamente cambios al extraer del repositorio.
El problema era que la cuenta ya contenía archivos del servidor web como:
... que no quería eliminar ni confirmar en mi repositorio. Necesitaba que se quedaran allí sin escena ni seguimiento.
Lo que hice:
Fui a mi carpeta web (carpeta_existente):
y entonces:
Mostraba (como se esperaba) una lista de muchos archivos no organizados, aquellos que ya existían inicialmente desde mi cuenta web de cPanel.
Luego, gracias a este artículo , acabo de agregar la lista de esos archivos a:
Este archivo, casi como el
.gitignore
archivo, le permite ignorar los archivos que se organizarán. Después de esto, no tuve nada que comprometer en el directorio .git /, funciona como un personal.gitignore
que nadie más puede ver.Ahora comprobando
git status
devoluciones:Ahora puedo implementar cambios en este servidor web simplemente extrayendo de mi repositorio git. Espero que esto ayude a algunos desarrolladores web a crear fácilmente un servidor provisional.
fuente
Esto es lo que estoy haciendo:
fuente
Tal vez entendí mal su pregunta, pero ¿no sería más simple si copia / mueve los archivos de A al repositorio de git B y agrega los necesarios con git add ?
ACTUALIZACIÓN: desde el documento de git:
FUENTE: http://git-scm.com/docs/git-clone
fuente
Estaba buscando algo similar, y esto es lo que se me ocurrió:
Mi situación es una en la que tengo un árbol web activo e intentaba crear un repositorio remoto para él sin mover ninguno de los archivos en el árbol web actual. Esto es lo que hice:
git init
git clone --bare /path/to/web/repo
[remote "origin"]
sección.[remote "origin"]
sección a .git / config en el árbol web que apunte al nuevo repositorio remoto.fuente
git clone --bare
aquí es superfluo y tortuoso. ¿Por qué no sologit remote add origin <URL>
en primer lugar?esto es un trabajo para mí, pero debe fusionar los archivos de repositorio remotos con los archivos locales:
fuente
Me gustó la respuesta de Dale , y también agregué
La poca profundidad evitó muchos compromisos de desarrollo tempranos adicionales. La nueva sucursal nos dio una buena historia visual de que había un nuevo código de este servidor que se colocó. Ese es el uso perfecto de las sucursales en mi opinión. Mi agradecimiento a la gran comprensión de todas las personas que publicaron aquí.
fuente
Tengo los mismos problemas al intentar clonar a c / code
Pero esta carpeta contiene una gran cantidad de proyectos.
Creé una nueva carpeta en c / code / newproject y asigné mi clon a esta carpeta.
git para escritorio luego le pregunté a mi usuario y luego cloné bien.
fuente