Usando rsync de msysgit para archivos binarios

22

Tengo tres cuadros de Windows que están conectados a un cuadro de Linux en mi red de varias maneras (uno local a la red, uno es una computadora portátil y puede o no ser local, y el otro es mi escritorio de trabajo). Actualmente estoy usando git para sincronizar la mayoría de mis cosas entre las cajas (usando la caja de Linux como servidor) y funciona como un campeón.

Ahora, sin embargo, también me gustaría agregar mi colección de MP3 (12 gigas) para sincronizar eficientemente entre cajas. Inicialmente pensé que podría usar git para esto, pero parece que rsync sería una mejor opción ya que realmente no necesito todas las cosas históricas. Como todos mis scripts de administración existentes se ejecutan bajo git bash (en lugar de cygwin), me gustaría poder usarlo desde git bash (MINGW32 es lo que dice en la barra de título de la ventana). ¿Puedo descargarlo en Cygwin y copiarlo o hay una mejor manera de abordarlo? La caja de Linux está ejecutando la última versión de la edición de Ubuntu Server. ¿Debo hacer algo para que rsync funcione correctamente?

Me doy cuenta de que probablemente estoy haciendo esto de una manera un poco más difícil de lo necesario, pero también estoy usando esto como un ejercicio para mejorar mis habilidades en la línea de comandos. ¿Alguna sugerencia?


Puedo usar rsync desde mi shell cygwin, pero no desde msysgit. Intenté copiar rsync.exe de la carpeta bin de cygwin a la carpeta bin de msysgit, pero aún no lo encuentro. ¿Hay algún otro paso que deba hacer para instalarlo allí? Es extraño que recibo un error de que no puede encontrar el archivo, en lugar de darme un error de que falta una de las dependencias del archivo.

Will Gant
fuente

Respuestas:

25

A partir de ahora (7/9/2017) es extremadamente fácil agregar manualmente soporte rsync al entorno Git para Windows sin siquiera tener que recurrir a ejecutar el SDK de Git para Windows.

Me encontré con esta publicación y no pensé que realmente podría ser tan fácil dadas todas las alternativas, pero realmente lo es. Todo lo que necesita hacer es tomar el paquete rsync del repositorio del paquete MSYS2 y extraer el rsync.exearchivo C:\Program Files\Git\usr\bin. Uno y listo. Funciona.

Si necesita ayuda para extraer rsync.exedel paquete rsync (que está en tar.xzformato), puede usar una utilidad de compresión como 7zip o hacerlo directamente dentro del entorno de Git para Windows bash de la siguiente manera:

cd /c/downloaded_location
tar -xvf rsync.pkg.tar.xz usr/bin/rsync.exe --strip-components=2

Esto le proporciona el rsync.exearchivo en la ubicación descargada (ajuste el nombre del paquete en consecuencia). A la luz de los problemas de permisos de Windows, no intentaré dar comandos específicos para obtener el exe en la C:\Program Files\Git\usr\bincarpeta. Puede copiarlo a través de una GUI de explorador o mediante una utilidad de línea de comandos elevada (y sí, requerirá permisos de nivel de administrador para copiar algo en las carpetas de Archivos de programa).

Si desea utilizar también desfile de autenticación con rsync sobre ssh, el binario ssh-concurso está ya instalado en Git para Windows y todo lo que tiene que hacer es añadir una pequeña porción de su ~/.bashrco ~/.bash_profilede archivos (ver sección de uso de ssh-desfile y de Git para Wiki de Windows ). Lo modifiqué específicamente para usarlo con el entorno Git para Windows y lo mejoré con alguna detección de un archivo de socket faltante:

# ssh-pageant allows use of the PuTTY authentication agent (Pageant)
SSH_PAGEANT="$(command -v ssh-pageant)"
if [ -S "$SSH_AUTH_SOCK" ]; then
  PAGEANT_SOCK=$SSH_AUTH_SOCK
else
  PAGEANT_SOCK=${TEMP:-/tmp}/.ssh-pageant-$USERNAME
fi
if [ -x "$SSH_PAGEANT" ]; then
  eval $("$SSH_PAGEANT" -qra "$PAGEANT_SOCK")
fi
unset SSH_PAGEANT
unset PAGEANT_SOCK

No puedo hablar sobre cómo otras utilidades podrían o no funcionar instalándolas manualmente de esta manera, pero rsync parece funcionar bien. Esperemos que ese repositorio se mantenga y continúe actualizándose, creo que sí, porque está alojado en el sitio oficial de MSYS2.

nextgentech
fuente
1
gracias señor, la descarga y funciona .. ¿Quién hubiera sabido ...
pscheit
Problema. No rsync.exesolo hay varias versiones de rsync en .pkg.tar.xz formatos. Eso podría estar bien, excepto que no puedo instalar apt-get install xz-utils( sudo apt-get install xz-utils) porque no puedo instalar sudoOR apt-geten Git Bash para Windows :-( y, por lo tanto, no puedo instalar xz-utils. ¿Hay alguna forma de evitar esto? ¿Hay un enlace más nuevo donde puedo obtener rsync.exe, o de alguna manera puedo hacer que Git Bash descomprima este archivo .xz?
SherylHohman
En realidad, parece ser más un problema de permisos. Cuando tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, consigo un montón de mensajes indicando: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directoryy Cannot open: No such file or directorypara varios archivos / directorios. ¿Quizás Git Bash ya sabe cómo descomprimir xzarchivos? Pero no puede b / e de permisos? No puedo usar ni instalar sudo. a Git Bash.
SherylHohman
Suponiendo que descargó el archivo tar.xz a su carpeta de Descargas, puede descomprimirlo de Git Bash usando:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn
@SherylHohman tienes que extraer manualmente el exe del archivo del paquete. No es necesaria una "instalación" que no sea simplemente soltar el C:\Program Files\Git\usr\binarchivo exe en la carpeta.
nextgentech
7

Sé que la pregunta no es "Usar rsync para MSYS", pero creo que mencionar esto es relevante:

"MinGW Shell" (anteriormente conocido como "MSYS (Sistema básico)") sí tiene rsync. Estoy usando ese shell / sistema tan a menudo como sea posible, ya que es mucho más pequeño que Cygwin. (Probablemente soy el único que se preocupa por el tamaño de los archivos en estos días).

"Git para Windows" / "Git Bash" podría agregar fácilmente rsync ya que se basa en MinGW / MSYS y se ha mencionado anteriormente en la lista de correo.

¡PD! Si su Shell MinGW no tiene rsync, simplemente ejecute "mingw-get install msys-rsync" para agregarlo.

Actualizado el 25 de marzo de 2016:

Git para Windows ahora usa MSYS2. Y MSYS2 usa "pacman", no "mingw-get", para instalar paquetes. Desafortunadamente, "Git para Windows" no incluye pacman ... Hay dos opciones:

  1. Instale el SDK de Git para Windows (que incluye pacman).
  2. Instale Git dentro de MSYS2.

La última opción es mi favorita, pero aún no está optimizada, por lo que la primera opción es probablemente más fácil. Con suerte, se solucionará .

¡PD! No he jugado mucho con MSYS2 / pacman, pero parece muy prometedor.

Actualizado el 7 de agosto de 2019:

Si está utilizando Git para Windows (Git Bash), es mucho mejor simplemente tomar el paquete rsync del repositorio del paquete MSYS2, como se describe en la respuesta anterior .

hansfn
fuente
tristemente, en Git Bash:$ mingw-get bash: mingw-get: command not found
Hendy Irawan
Sí, es un poco triste. Mire mi respuesta actualizada arriba, aún triste, pero la situación ha mejorado.
hansfn
Fui por la segunda opción y terminé con una carpeta de 2.17GB, pero todo funciona a las mil maravillas. Instalé rsync usando pacman -S rsync. En el pasado usé CygWin, pero creo que MSYS2 es increíble, no tengo que ejecutar una interfaz gráfica de usuario para instalar paquetes adicionales.
Edenshaw
El informe de error enumerado en esta respuesta se ha cerrado desde entonces como "no reparable"; sin embargo, he creado una solicitud de extracción para que se incluya rsync con Git para Windows .
Scott Stevens
¿Algún enlace sobre cómo hacer la opción 1 o la opción 2? Creo que tengo Git para Windows SDK. No sé. Pero suponiendo que lo haga, o pueda obtenerlo ... ¿entonces qué? Si no, no tengo idea de lo que significa incluso instalar Git dentro de MSYS2. ¿Eso significa que necesito eliminar mi instalación actual de Git? ¿Perderé algo, como la configuración o la funcionalidad si lo hago? ¿Se romperán los enlaces?
SherylHohman
2

Supongo git bashque realmente quieres decir msysgit, también conocido como "git para windows". La opción del menú Inicio es git bash, que explica el nombre que usó.

Primero, tienes razón al descartar git como una opción aquí. Una de las cosas que git no hace bien es manejar archivos binarios, y terminarías con un gran depósito hinchado. Además, dado que no manejarás los cambios, usar la sobrecarga de git me parece una exageración.

En segundo lugar, parece que la pregunta que realmente hace es: "¿Puedo usar rsync desde msysgit / Windows?" La respuesta corta es, no fuera de la caja. msysgites realmente solo la línea de comandos de Windows en términos de forma y función. Dicho esto, tiene dos opciones: descargar una herramienta de terceros para habilitar rsync en su máquina Windows ( Desbordamiento de pila: Rsync para Windows ), o simplemente usar cygwin. Realmente, tienen el mismo resultado, así que depende de usted decidir cuáles funcionan mejor.

Andrew M.
fuente
Puedo usar rsync desde mi shell cygwin, pero no desde msysgit. Intenté copiar rsync.exe de la carpeta bin de cygwin a la carpeta bin de msysgit, pero aún no lo encuentro. ¿Hay algún otro paso que deba hacer para instalarlo allí? Es extraño que recibo un error de que no puede encontrar el archivo, en lugar de darme un error de que falta una de las dependencias del archivo. Gracias, Will
Will Gant
Esto simplemente no es posible. cygwin configura un entorno basado en GNU, que incluye bibliotecas similares a Linux, configuraciones, etc. msysgites la línea de comandos de Windows, que admite ejecutables de Windows. Lo que probablemente esté sucediendo es que ni siquiera puede detectar el archivo como ejecutable. En pocas palabras, cygwin y msysgit ni siquiera son remotamente compatibles.
Andrew M.
Es posiblemente pero hacky. Copie cygiconv-2.dll, cygwin1.dlly rsync.exede Cygwin a su ruta de msysgit. Nada más (especialmente no ssh.exe). El problema suele ser una incompatibilidad entre Git SSH y Cygwin / rsync SSH. Intenta mantener la misma versión. Todavía tendrá problemas con el /cygdrive/pero no tengo solución, excepto a cd.
Wernight
0

Por lo que vale, estaba teniendo problemas similares para que cwRsync funcione en msysgit cuando se dejó caer en la ruta bin, pero después de probar muchas cosas diferentes, finalmente descubrí que simplemente actualizar a la última versión (2.10.2) de Git para Windows solucionó el problema problema.

Nick F
fuente
cwRsync cuesta $ 19 / año itefix.net/cwrsync
SherylHohman
0

rsync es ideal para la sincronización unidireccional. Puede ejecutar rsync bajo cygwin, o para Windows también hay Deltacopy

Si desea tener sincronización bidireccional, eche un vistazo al unísono

Para una herramienta de sincronización de directorios multiplataforma, existe una sincronización que se ejecuta en la mayoría de las plataformas.

shouldbeq931
fuente
Unison es genial, pero debe instalarlo en el servidor, como el 90% de los servidores están preparados para rsync. Y OP pidió rsync
pscheit
el PO preguntó sobre rsync, pero el lo que el PO estaba tratando de lograr que se "deben sincronizarse de manera eficiente entre las cajas", y al unísono se encuentra disponible en la mayoría de repos ...
shouldbeq931
Parece que DeltaCopy no está disponible para Windows 10. ¿Ya no se puede mantener?
SherylHohman
Es difícil saber si Unison funciona en Windows 10. No ha tenido una actualización en mucho tiempo. No se menciona qué versiones del sistema operativo Windows son compatibles con este software. Hay varios problemas con respecto a: Windows 10 github.com/bcpierce00/unison/…
SherylHohman
Como una herramienta multiplataforma para mantener una estructura de directorios en sincronía estos días, me gustaría sugerir syncthing syncthing.net Sin embargo, en 2011 ....
shouldbeq931