Tengo un servidor que estoy quitando. Lo único que me queda por migrar es mi repositorio. Este servidor aparece como el origen (maestro) de uno de mis proyectos. ¿Cuál es la forma correcta de mover el repositorio para mantener el historial?
Tengo un servidor que estoy quitando. Lo único que me queda por migrar es mi repositorio. Este servidor aparece como el origen (maestro) de uno de mis proyectos. ¿Cuál es la forma correcta de mover el repositorio para mantener el historial?
Respuestas:
Para agregar la nueva ubicación del repositorio,
git remote add new_repo_name new_repo_url
Luego empuje el contenido a la nueva ubicación
git push new_repo_name master
Finalmente quita el viejo
git remote rm origin
Después de eso, puede hacer lo que dijo bdonlan y editar el archivo git / config para cambiar el nuevo nombre_poder a origen. Si no elimina el origen (repositorio remoto original), simplemente puede empujar los cambios al nuevo repositorio con
git push new_repo_name master
git push -u new_repo_name --all.
git remote rename new_repo_name origin
Si desea migrar todas las ramas y etiquetas, debe usar los siguientes comandos:
git clone --mirror [oldUrl]
para clonar el antiguo repositorio con todas las ramas
cd the_repo
git remote add remoteName newRepoUrl
configurar un nuevo control remoto
git push -f --tags remoteName refs/heads/*:refs/heads/*
para empujar todas las referencias bajo referencias / cabezas (que es probablemente lo que quieres)
--tagsy refs/heads/*:refs/heads/*no es compatible con él --mirror. stackoverflow.com/a/26552740/1484831 funcionó bien.
refs/heads/refs/headsutilizando git push -f --tags remoteName refs/heads/*:refs/heads/*así que he cambiado agit push remoteName --mirror
pushTambién apoya --mirror. git clone --mirror; cd repo; git push --mirror new_remotedebería hacer el truco
Esto funcionó para mí sin problemas .
git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin
Sin embargo, debo mencionar que esto crea un espejo de su repositorio actual y luego lo empuja a la nueva ubicación. Por lo tanto, esto puede tomar algún tiempo para repositorios grandes o conexiones lentas .
git push --mirror originsobre -f.
Cópialo de nuevo. Es realmente así de simple. :)
En el lado del cliente, solo edite .git / config en el repositorio local del cliente para apuntar sus controles remotos a la nueva URL según sea necesario.
Esto se hace en partes en algunas de las otras respuestas.
git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new
--mirroren el empuje es muy importante: esta debería ser la respuesta correcta
git init --bare
Solo vuelvo a publicar lo que otros han dicho, en una lista de instrucciones simple de seguir.
Mueva el repositorio: simplemente inicie sesión en el nuevo servidor, cden el directorio principal donde ahora desea mantener el repositorio, y use rsyncpara copiar desde el servidor anterior:
new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
Hacer que los clientes apunten al nuevo repositorio: ahora, en cada cliente que use el repositorio, simplemente quite el puntero al origen anterior y agregue uno al nuevo.
client> git remote rm origin
client> git remote add origin user@new.server.com:path/to/repository.git
git remote set-url origin user@new.server.com:path/to/repository.git
Echa un vistazo a esta receta en GitHub: https://help.github.com/articles/importing-an-external-git-repository
Probé varios métodos antes de descubrir git push --mirror.
¡Trabajado como un encanto!
git clone --mirror ..., git remote add ...,git push --mirror ...
Seguí las instrucciones en BitBucket para mover un repositorio con todas sus ramas allí. Aquí vienen los pasos con explicaciones que siguen al #personaje:
cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://git@bitbucket.org/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go
Funcionó muy bien para mí.
Esta es una variación de esta respuesta , actualmente sugerida por gitlab para "migrar" un repositorio git de un servidor a otro.
Supongamos que se llama a su antiguo proyecto existing_repo, almacenado en una existing_repocarpeta.
Crea un repositorio en tu nuevo servidor. Asumiremos que la url de ese nuevo proyecto esgit@newserver:newproject.git
Abra una interfaz de línea de comandos e ingrese lo siguiente:
cd existing_repo
git remote rename origin old-origin
git remote add origin git@newserver:newproject.git
git push -u origin --all
git push -u origin --tags
Los beneficios de este enfoque es que no elimina la rama que corresponde a su antiguo servidor.
Puede usar el siguiente comando:
git remote set-url --push origin new_repo_url
Ejemplo de http://gitref.org/remotes/
$ git remote -v
github git@github.com:schacon/hw.git (fetch)
github git@github.com:schacon/hw.git (push)
origin git://github.com/github/git-reference.git (fetch)
origin git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github git@github.com:schacon/hw.git (fetch)
github git@github.com:schacon/hw.git (push)
origin git://github.com/github/git-reference.git (fetch)
origin git://github.com/pjhyett/hw.git (push)
Debería ser tan simple como:
git remote set-url origin git://new.url.here
De esta manera, mantienes el nombre originde tu nuevo repositorio, luego empujas al nuevo repositorio, el antiguo como se detalla en las otras respuestas. Supongamos que trabaja solo y tiene un repositorio local que desea reflejar con todo su contenido en él, también podría hacerlo (desde dentro de su repositorio local)
git push origin --mirror # origin points to your new repo
pero vea ¿Es "git push --mirror" suficiente para hacer una copia de seguridad de mi repositorio? (en general, no use, --mirrorpero una vez).
Si desea pasar de un origen a otro y también mantener una copia de seguridad de su origen actual en su máquina local, puede seguir estos pasos:
Ahora en la carpeta hacer
git remote get-url origin
El comando anterior proporciona la URL de origen remota actual, útil para volver a establecer el origen en el último paso
git remote set-url origin git@github.newlocation:folder/newrepo.git
El comando anterior establece el origen remoto en la nueva ubicación
git push --set-upstream origin develop
El comando anterior empuja la rama local activa actual a remota con el desarrollo de nombre de rama. Por supuesto, conserva toda la historia, ya que con git también se empuja toda la historia.
git remote set-url origin <original old origin>
El comando anterior restablece el origen remoto a su origen actual: desea esto porque está en su carpeta existente y probablemente no desee mezclar el nombre de su carpeta local actual con la nueva carpeta que va a crear para clonar el repositorio acabas de empujar.
Espero que esto ayude,
Si desea migrar un repositorio #git de un servidor a uno nuevo, puede hacerlo así:
git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS NEW_REPOSITORY_PATH
#check out all remote branches
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags
Todas las ramas y etiquetas remotas del antiguo repositorio se copiarán en el nuevo repositorio.
Ejecutando este comando solo:
git push NEW_REPOSITORY_ALIAS
solo copiaría una rama maestra (solo ramas de seguimiento) al nuevo repositorio.