¿Cómo mantener dos repositorys git sincronizados?

Estoy ejecutando mi propio repository git privado en un server privado en una installation colo. Lo uso para proyectos privados que no puedo abrir. Yo uso github para todo mi trabajo de código abierto.

Hago desarrollo en una máquina ubuntu de escritorio y en mi MacBookPro. A medida que realizo cambios en mis sistemas de desarrollo, presiono los cambios al origen en el colo y los llevo al otro sistema. Soy bastante bueno en mantener los tres sistemas actualizados en su mayor parte, principalmente para fines de respaldo y recuperación de desastres.

Ahora que BitBucket ofrece hospedaje de git privado de forma gratuita, estoy considerando agregar un clon de mis proyectos allí. Además, entonces podría usar las características adicionales proporcionadas por BitBucket que mi barebones private git server no proporciona. Sin embargo, me gustaría continuar manteniendo una copy de los repos privados en mi server colo también para la networkingundancia de respaldo.

Entonces tengo algunas preguntas:

  1. Sin cambiar mi process de desarrollo estándar (editar, agregar, confirmar, enviar), ¿cómo puedo sincronizar automáticamente las confirmaciones enviadas a mi server a un proyecto de bitbucket? Cada vez que presiono mi server de git, me gustaría que esos commits sean automáticamente enviados a mi proyecto bitbucket. No quiero cambiar mi flujo de trabajo y me gustaría hacer los pequeños cambios necesarios a mis clientes de desarrollo.

  2. Si quiero usar bitbucket como mi repository principal de git, ¿cómo migro mis proyectos de mi server privado de git a bitbucket?

  3. Una vez que migro a bitbucket, todavía me gustaría otra copy de security en mi server. ¿Cómo puedo hacer commits automáticamente para que Bitbucket sea enviado a mi server git? Esto es básicamente el reverso de la pregunta 1.

Para el n. ° 1, la solución más fácil es usar un gancho en su repository remoto que empuja automáticamente a BitBucket.

Para el n. ° 2: simplemente agrega bitbucket como control remoto y empuja hacia él en lugar de su origen. Si tiene alguna twig de seguimiento (compruebe .git/config ), cambie remote = origin al nombre que utilizó para bitbucket. Otra solución sería eliminar / cambiar el nombre de su control remoto de origin existente y agregar bitbucket como origen.

Para # 3: un cronjob ejecutando git fetch es probablemente la forma más fácil de hacer esto.

Tal vez podrías agregar un git hook a tu server privado para enviar automáticamente bitbucket. En el libro de progit hay un capítulo sobre git hooks: http://progit.org/book/ch7-3.html