2012-04-27 21 views
6

Mi tarea es mover nuestros repositorios de github público a una instancia privada de github en nuestra red local.Transferir el repositorio de git "autorizado" de Github a un github privado

Mi pensamiento es moverlos con

git clone --bare <github-repo-url> 
git push --mirror <local-github-url> 

Durante un tiempo de transición, que debería ser capaz de hacer la actualización espejo mismo desde el repositorio GitHub en el papá. (¿O no? No he encontrado un comando en la interfaz de usuario para hacer una actualización.)

Luego eliminaré el repositorio github "autorizado", y el espejo se convertirá en autoridad.

¿Pero cómo sucede eso? ¿Cada desarrollador necesita cambiar la URL de "origen" en .git/config?

¿Aceptará el espejo los empujes que no son actualizaciones de su clon padre?

+0

Más información: El "local-github-url" es realmente un Github. Es un servicio privado de Github Enterprise. No tengo acceso de shell o crontab al Github privado. – Mojo

Respuesta

5

Su proceso es casi perfecto. Lo único que faltaba era un parámetro --mirror en el clon inicial.

# create the private repo 
ssh private-server 
mkdir -p /path/to/shared/repos 
git init --shared={whatever makes sense for your environment} /path/to/shared/repos/internalrepo.git 
exit 
# go to github.com and make the public repo readonly 
# create a local mirror 
git clone --bare --mirror $Github-URL github.git 
# now the local repo github.git contains all the stuff from the github repo 
cd github.git 
git push --mirror $Private-URL 
# Tell all developers to execute `git remote set-url origin $Private-URL` 
# Done 

no dejaría el repositorio GitHub abierto a los cambios, ya que no sería evidente para todos en el proyecto que ahora repo es el repositorio correcto. Todavía se puede hacer, si se ejecuta en el servidor-repo

ssh private-server 
cd /path/to/shared/repos/internalrepo.git 
git remote add --mirror github $Github-URL 

y con regularidad (como en una tarea programada)

git fetch github # get new commits from github 
git remote prune github # drop branches, which are now deleted in the github repo 

Edición

También puede utilizar el espejo local para hacer el intercambio. Pero no hay un proceso automatizado fácil, ya que git no puede decidir ni qué hacer con las ramas eliminadas, ni qué hacer con las ramas divergentes. Necesitas tener un repositorio en funcionamiento donde recoges regularmente las cosas del antiguo github-repo, traes las cosas del repositorio interno, resuelves el historial divergente y vuelvo a enviar estas cosas al repositorio interno.

+1

Rudi, gran respuesta! Sin embargo, supone que el repositorio privado está en una máquina donde tengo shell/crontab. En mi caso, el repositorio privado está en una instancia de "Github Enterprise" que está dentro de un firewall. No tengo acceso directo al repositorio privado, excepto a través de git y el sitio web. – Mojo

+0

Todavía tengo que ver una solución para GHE. Incluso se eliminó alguna discusión en el sitio web de GHE. – Shane

Cuestiones relacionadas