Esta respuesta actualmente solo se aplica al uso de dos computadoras con Linux [¿o tal vez también funciona en Mac? - ¿No se ha probado en Mac] (sincronización de una a la otra) porque escribí este script de sincronización en bash. Sin git
embargo, es simplemente una envoltura , así que siéntase libre de tomarlo y convertirlo en una solución Python multiplataforma o algo así si lo desea
Esto no responde directamente a la pregunta del OP, pero está tan cerca que garantizo que responderá a la pregunta de muchas otras personas que llegan a esta página (la mía incluida, en realidad, ya que vine aquí antes de escribir mi propia solución), así que Lo estoy publicando aquí de todos modos.
Quiero:
- desarrollar código usando un IDE potente como Eclipse en una computadora Linux liviana, luego
- construya ese código a través de ssh en una computadora Linux más potente y diferente (desde la línea de comandos, NO desde dentro de Eclipse)
Llamemos a la primera computadora donde escribo el código "PC1" (Computadora personal 1) y a la segunda computadora donde construyo el código "PC2". Necesito una herramienta para sincronizar fácilmente de PC1 a PC2. Lo intenté rsync
, pero fue increíblemente lento para grandes repositorios y tomó toneladas de ancho de banda y datos.
Entonces, ¿cómo lo hago? ¿Qué flujo de trabajo debo usar? Si también tiene esta pregunta, aquí está el flujo de trabajo que decidí. Escribí un script bash para automatizar el proceso mediante el uso git
para impulsar automáticamente los cambios de PC1 a PC2 a través de un repositorio remoto, como github. Hasta ahora funciona muy bien y estoy muy satisfecho con eso. Es mucho más rápido que rsync
, más confiable en mi opinión, porque cada PC mantiene un repositorio git funcional y usa mucho menos ancho de banda para realizar la sincronización completa, por lo que es fácilmente factible en un punto de acceso de teléfono celular sin usar toneladas de sus datos.
Preparar:
Instale el script en PC1 (esta solución asume que ~ / bin está en su $ PATH):
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
Ahora edite el archivo "~ / .sync_git_repo" que acaba de copiar arriba y actualice sus parámetros para que se ajusten a su caso. Aquí están los parámetros que contiene:
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
Git clone su repositorio que desea sincronizar en PC1 y PC2.
- Asegúrese de que sus teclas ssh estén configuradas para poder empujar y tirar al repositorio remoto desde PC1 y PC2. Aquí hay algunos enlaces útiles:
- https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- Asegúrese de que sus claves ssh estén configuradas para ssh desde PC1 a PC2.
Ahora cd
en cualquier directorio dentro del repositorio de git en PC1, y ejecute:
sync_git_repo_from_pc1_to_pc2
¡Eso es! Aproximadamente 30 segundos después, todo se sincronizará mágicamente de PC1 a PC2, e imprimirá resultados todo el tiempo para decirle qué está haciendo y dónde lo está haciendo en su disco y en qué computadora. También es seguro, porque no sobrescribe ni elimina nada que no se haya confirmado. ¡Lo respalda primero! Lea más abajo para saber cómo funciona.
Aquí está el proceso que usa este script (es decir: lo que realmente está haciendo)
- Desde la PC1: Verifica si hay cambios no confirmados en la PC1. Si es así, los compromete a un compromiso temporal en la rama actual. Luego, la fuerza los empuja a una rama SYNC remota. Luego, confirma su confirmación temporal que acaba de hacer en la rama local, luego vuelve a colocar el repositorio local de git exactamente como estaba al organizar los archivos que se organizaron previamente en el momento en que llamó al script. Luego,
rsync
es una copia del script para PC2, y hace una ssh
llamada para decirle a PC2 que ejecute el script con una opción especial para hacer cosas de PC2.
- Esto es lo que hace PC2:
cd
está en el repositorio y verifica si existen cambios locales no confirmados. Si es así, crea una nueva bifurcación de respaldo bifurcada de la bifurcación actual (nombre de muestra: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- observe que es AAAAMMDD-HHMMhrs - SSsec), y confirma cualquier cambio no confirmado a esa bifurcación con un mensaje de confirmación como HACER UNA COPIA DE SEGURIDAD CAMBIOS NO COMPROMETIDOS EN PC2 (PC OBJETIVO / MÁQUINA DE CONSTRUCCIÓN). Ahora, comprueba la rama SYNC, extrayéndola del repositorio remoto si aún no está en la máquina local. Luego, recupera los últimos cambios en el repositorio remoto y realiza un restablecimiento completo para forzar que el repositorio SYNC local coincida con el repositorio SYNC remoto. Podría llamar a esto un "tirón duro". Sin embargo, es seguro porque ya hicimos una copia de seguridad de los cambios no confirmados que teníamos localmente en PC2, ¡así que no se pierde nada!
- ¡Eso es! ¡Ahora ha producido una copia perfecta de PC1 a PC2 sin siquiera tener que garantizar directorios de trabajo limpios, ya que el script manejó todo el compromiso automático y todo eso para usted! Es rápido y funciona muy bien en grandes repositorios. Ahora tiene un mecanismo fácil para usar cualquier IDE de su elección en una máquina mientras construye o prueba en otra máquina, fácilmente, a través de un punto de acceso wifi desde su teléfono celular si es necesario, incluso si el repositorio es decenas de gigabytes y ya es hora y con recursos limitados.
Recursos:
- Todo el proyecto: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Vea toneladas más de enlaces y referencias en el propio código fuente dentro de este proyecto.
- Cómo hacer un "tirón duro", como lo llamo: ¿Cómo forzo al "git pull" a sobrescribir los archivos locales?
Relacionado:
- sincronización de repositorio git entre computadoras, cuando se mueve?