Cómo mover repositorys git de github al server local que ejecuta gitolita

Me gustaría saber la mejor manera de mover todos mis repositorys git actualmente alojados en github a un nuevo server git basado en gitolite.

Solo por saber, la razón por la que estoy haciendo este cambio es la adopción de Redmine para apoyar nuestro process de administración de proyectos.

Agregue el nuevo repository en gitolite-admin / conf / gitolite.conf

repo my-new-repo RW+ = your-user 

Agregue, confirme y presione los cambios en gitolite-admin

 git add conf/gitolite.conf git commit -m "Added my-new-repo" git push origin 

Clona tu repository github y finaliza la compra de todas las sucursales presentes

 git clone github.com:/USERNAME/YOUR_REPO.git cd YOUR_REPO for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do git branch --track ${branch##*/} $branch; done 

Retire el control remoto de github y agregue su control remoto de gitolita:

 git remote rm origin git remote add origin YOURSERVER:my-new-repo.git 

Presione todas las references en el repository administrado por gitolite:

 git push --all origin 

Verifiqué los pasos en un repository de testing mío, y todos los árbitros parecen haberse propagado al nuevo repository.

ACTUALIZACIÓN: como señaló Seth, cualquier otro árbitro distinto de las twigs no se propaga al nuevo repository. Yo también siento que Mirror sería una mejor opción.

Con reference a esto: http://gitolite.com/gitolite/gitolite.html#existing . Qué tal si:

  1. En el server gitolite, haga un espejo de los repositorys github con el command git clone --mirror <github git repo path>
  2. Mueva el repository espejo a la location correcta como en el enlace de arriba, luego simplemente siga la sección moviendo los repos existentes en gitolite de la guía.

Lo mejor que se me ocurre es sacar una copy local, cambiar el origen al nuevo server y luego presionar:

 git pull --all git remote rm origin git remote add origin <new repo address> git push --all --repo=origin 

Quizás también quiera llevar sus tags al nuevo server. Esto puede hacerse por

  git push --tags 

Para reflejar un repository de GitHub en Gitolite, primero cree un repository nuevo en Gitolite (usando el gitolite-admin – supongo que el administrador de Gitolite sabe cómo hacerlo), pero aquí hay una input de configuration de ejemplo:

 repo github/<gh-user>/<gh-repo> desc = "Repository description [https://github.com/<gh-user>/<gh-repo>]" owner = "My Name" category = "GitHub" RW+ = my_key 

donde <gh-user> es el usuario de GitHub y <gh-repo> es el depósito de GitHub reflejado. Este ejemplo coloca el espejo dentro de un subdirectory GitHub y usuario, pero puede usar cualquier ruta de repo que le convenga.

Luego, desde cualquier lugar con acceso a GitHub y Gitolite:

 $ git clone --mirror https://github.com/<gh-user>/<gh-repo> $ cd <gh-repo>.git $ git push --mirror gitolite git@git:github/<gh-user>/<gh-repo> $ cd .. $ rm -rf <gh-repo>.git 

donde git@git es el usuario de SSH y el nombre de host utilizado para conectarse a Gitolite. El clon local es temporal y se elimina después.

El OP solo preguntó sobre repositorys mobilees, en cuyo caso podría detenerse aquí. Sin embargo, si fuera conveniente alojar un espejo local de un repository en GitHub y sincronizar periódicamente el espejo local, aquí hay una manera de hacerlo.

Para sincronizar el espejo de Gitolite con GitHub, inicie session en el server de Gitolite como el usuario de Gitolite admin ( git ) y realice la siguiente configuration:

 $ cd ~git/repositories/github/<gh-user>/<gh-repo> $ git remote add origin https://github.com/<gh-user>/<gh-repo> $ git config remote.origin.fetch "+*:*" 

Los parameters en los commands se explican claramente aquí .

Luego, para sincronizar el repository:

 $ git fetch --prune 

La búsqueda podría ser automatizada a través de un trabajo cron .