Este equipo de especialistas luego de ciertos días de investigación y de recopilar de datos, dimos con los datos necesarios, esperamos que resulte de utilidad para tu trabajo.
Solución:
Es muy sencillo. A Git no le importa cuál es el nombre de su directorio. Sólo le importa lo que hay dentro. Así que simplemente puedes hacer:
# copy the directory into newrepo dir that exists already (else create it)
$ cp -r gitrepo1 newrepo
# remove .git from old repo to delete all history and anything git from it
$ rm -rf gitrepo1/.git
Tenga en cuenta que la copia es bastante costosa si el repositorio es grande y tiene una larga historia. También puedes evitarlo fácilmente:
# move the directory instead
$ mv gitrepo1 newrepo
# make a copy of the latest version
# Either:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/ # doesn't copy .gitignore (and other hidden files)
# Or:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git
# Or (look further here: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote= HEAD | tar xf -
Una vez que creas newrepo
el destino para poner gitrepo1
podría estar en cualquier lugar, incluso dentro newrepo
si lo quieres. No cambia el procedimiento, solo la ruta que estás escribiendo. gitrepo1
espalda.
Es aún más simple que eso. Acabo de hacer esto (en Windows, pero debería funcionar en otro sistema operativo):
- Crear nuevorepo.
- Moverse gitrepo1 dentro nuevorepo.
- Moverse .git desde gitrepo1 para nuevorepo (un nivel arriba).
- Confirme los cambios (corrija el seguimiento según sea necesario).
Git solo ve que agregó un directorio y cambió el nombre de un montón de archivos. No hay problema.
Para hacer esto sin ningún dolor de cabeza:
- Mira cuál es la rama actual en el gitrepo1 con
git status
digamos rama “desarrollo”. - Cambiar directorio al nuevorepoluego
git clone
el proyecto desde el repositorio. - Cambiar rama en nuevorepo al anterior:
git checkout development
. - sincronizar nuevorepo con el mayor, gitrepo1 utilizando
rsync
, excluyendo la carpeta .git:rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1
. No tienes que hacer esto conrsync
por supuesto, pero lo hace tan suave.
El beneficio de este enfoque: eres bueno para continuar exactamente donde lo dejaste: tu rama anterior, cambios sin etapas, etc.
Si te ha resultado de provecho este artículo, agradeceríamos que lo compartas con el resto juniors de esta manera nos ayudas a dar difusión a esta información.