git - crear - ¿Cómo puedo clonar en un directorio no vacío?
git clone (13)
Tengo el directorio A con los archivos que coinciden con el directorio B. El directorio A puede tener otros archivos necesarios. Directorio B es un repositorio git.
Quiero clonar el directorio B en el directorio A, pero git-clone no me lo permitirá, ya que el directorio no está vacío.
Tenía la esperanza de que simplemente clonara .git y, como 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 presionen / tiren con y no quiero configurarlos manualmente.
¿Hay alguna manera 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
En los siguientes comandos de shell, existing-dir
es un directorio cuyo contenido coincide con los archivos rastreados en el repo-to-clone
git de repo-to-clone
.
# Clone just the repository''s .git folder (excluding files as they are already in
# `existing-dir`) into an empty temporary directory
git clone --no-checkout repo-to-clone existing-dir/existing-dir.tmp # might want --no-hardlinks for cloning local repo
# Move the .git folder to the directory with the files.
# This makes `existing-dir` a git repo.
mv existing-dir/existing-dir.tmp/.git existing-dir/
# Delete the temporary directory
rmdir existing-dir/existing-dir.tmp
cd existing-dir
# git thinks all files are deleted, this reverts the state of the repo to HEAD.
# WARNING: any local changes to the files will be lost.
git reset --hard HEAD
Estaba buscando algo similar, y esto es lo que se me ocurrió:
Mi situación es en la que tengo un árbol web activo e intenté crear un repositorio remoto para él sin mover ninguno de los archivos del árbol web actual. Esto es lo que hice:
- Ve al árbol web y ejecuta
git init
- Vaya a la ubicación deseada del repositorio y ejecute:
git clone --bare /path/to/web/repo
- Edite el archivo de configuración en mi repositorio remoto y elimine la sección
[remote "origin"]
. - Agregue una sección
[remote "origin"]
a .git / config en el árbol web que apunta al nuevo repositorio remoto.
Este es un trabajo para mí, pero debe combinar los archivos del repositorio remoto con los archivos locales:
git init
git remote add origin url-to-git
git branch --set-upstream-to=origin/master master
git fetch
git status
Esto es lo que estoy haciendo:
git clone repo /tmp/folder
cp -rf /tmp/folder/.git /dest/folder/
cd /dest/folder
git checkout -f master
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 ejecuté git init
.
Como no quería que los archivos del directorio A fueran seguidos por git, edité .gitignore y le agregué los archivos existentes. Después de esto ejecuté git remote add origin ''<url>'' && git pull origin master
et voíla, B se "clona" en A sin un solo problema.
Esto funcionó para mí:
cd existing_folder
git init
git remote add origin path_to_your_repo.git
git add .
git commit
git push -u origin master
Esto funcionó para mí:
git init
git remote add origin PATH/TO/REPO
git fetch
git reset origin/master # this is required if files in the non-empty directory are in the repo
git checkout -t origin/master
NOTA: - establecerá la rama ascendente para usted, si eso es lo que quiere, y generalmente lo es.
He usado esto hace unos momentos, requiere los comandos menos potencialmente destructivos:
cd existing-dir
git clone --bare repo-to-clone .git
git config --unset core.bare
git reset
¡Y voilá!
Me gustó la respuesta de Dale, y también agregué
git clone --depth 2 --no-checkout repo-to-clone existing-dir/existing-dir.tmp
git branch dev_new214
git checkout dev_new214
git add .
git commit
git checkout dev
git merge dev_new214
La poca profundidad evitó un montón de compromisos de desarrollo temprano adicionales. La nueva sucursal nos dio un buen historial visual de que había un código nuevo de este servidor que se colocó. Ese es el uso perfecto de las sucursales en mi opinión. Mi agradecimiento a la gran visión de todas las personas que publicaron aquí.
Otra receta simple parece funcionar bien para mí:
git clone --bare $URL .git
git config core.bare false
Mi principal caso de uso para acceder a un directorio con archivos existentes es controlar mis archivos de puntos Unix con Git. En una nueva cuenta, el directorio de inicio ya tendrá algunos archivos, posiblemente incluso los que deseo obtener de Git.
Tal vez entendí mal su pregunta, pero ¿no sería más sencillo si copia / mueve los archivos de A al repositorio de git B y agrega los necesarios con git add ?
ACTUALIZACIÓN: Desde el git doc:
La clonación en un directorio existente solo se permite si el directorio está vacío.
Una ligera modificación a una de las respuestas que me funcionó:
git init
git remote add origin PATH/TO/REPO
git pull origin master
para empezar a trabajar en la rama maestra de inmediato.
git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master -f
Modificado a partir de la respuesta de @ cmcginty - sin el -f no funcionó para mí