Usando o rsync do msysgit para arquivos binários


22

Eu tenho três caixas de janelas conectadas a uma caixa Linux na minha rede de várias maneiras (uma local para a rede, uma é um laptop e pode ou não ser local e a outra é minha área de trabalho). Atualmente, estou usando o git para sincronizar a maioria das minhas coisas entre as caixas (usando a caixa do Linux como servidor) e funciona como um campeão.

Agora, no entanto, eu também gostaria de adicionar minha coleção de MP3 (12 shows) para ser sincronizada com eficiência entre as caixas. Inicialmente, pensei que poderia usar o git para isso, mas parece que o rsync seria uma escolha melhor, pois eu realmente não preciso de todas as coisas históricas. Como todos os meus scripts de gerenciamento existentes são executados no git bash (em vez do cygwin), eu gostaria de poder usá-lo no git bash (MINGW32 é o que diz na barra de título da janela). Posso apenas fazer o download no Cygwin e copiá-lo ou existe uma maneira melhor de abordá-lo? A caixa do Linux está executando a versão mais recente do Ubuntu Server edition - preciso fazer algo para permitir que o rsync funcione corretamente?

Sei que provavelmente estou fazendo isso de uma maneira um pouco mais difícil do que o necessário, mas também estou usando isso como um exercício para melhorar minhas habilidades de linha de comando. Alguma sugestão?


Posso usar o rsync no meu shell cygwin, mas não no msysgit. Tentei copiar o rsync.exe da pasta bin do cygwin para a pasta bin do msysgit, mas ele ainda não está sendo encontrado. Há algum outro passo que preciso fazer para instalá-lo lá? É estranho que eu esteja recebendo um erro que não consegue encontrar o arquivo, em vez de me dar um erro de que uma das dependências do arquivo está ausente.

Respostas:


25

A partir de agora (7/9/2017), é extremamente fácil adicionar manualmente o suporte ao rsync ao ambiente do Git for Windows sem precisar recorrer à execução do SDK do Git for Windows.

Eu tropecei neste post e não achei que pudesse ser tão fácil, dadas todas as alternativas, mas é mesmo. Tudo o que você precisa fazer é pegar o pacote rsync no repositório do pacote MSYS2 e extrair o rsync.exearquivo C:\Program Files\Git\usr\bin. Um e pronto. Funciona.

Se precisar de ajuda para extrair rsync.exedo pacote rsync (que está em tar.xzformato), você pode usar um utilitário de compactação como o 7zip ou fazê-lo diretamente no ambiente de basquete do Git for Windows da seguinte forma:

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

Isto dá-lhe o rsync.exearquivo no local baixado (ajustar o nome do pacote em conformidade). À luz dos problemas de permissão do Windows, não tentarei fornecer comandos específicos para colocar o exe na C:\Program Files\Git\usr\binpasta. Você pode copiá-lo por meio de uma GUI do explorador ou por meio de um utilitário de linha de comando elevado (e sim, isso exigirá permissões no nível de administrador para copiar algo para as pastas Arquivos de Programas).

Se você também deseja usar a autenticação Pageant com o rsync over ssh, o binário ssh-pageant está instalado no Git for Windows e tudo que você precisa fazer é adicionar um pouco ao seu arquivo ~/.bashrcou ~/.bash_profile(consulte a seção uso do ssh-pageant e Git para Wiki do Windows ). Modifiquei-o especificamente para uso com o ambiente Git for Windows e aprimorei-o com alguma detecção de um arquivo de soquete ausente:

# 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

Não posso falar sobre como outros utilitários podem ou não funcionar instalando-os manualmente dessa maneira, mas o rsync parece funcionar muito bem. Espero que o repo permaneça e continue sendo atualizado - acho que sim, porque está hospedado no site oficial do MSYS2.


1
obrigado senhor, download e funciona .. quem teria sabido ...
pscheit

Problema. Não há rsync.exeapenas várias versões do rsync nos .pkg.tar.xz formatos. Isso pode ser bom, exceto que não consigo instalar apt-get install xz-utils( sudo apt-get install xz-utils) porque não consigo instalar o sudoOR apt-getno Git Bash para Windows :-( e, portanto, não consigo instalar xz-utils. Existe alguma maneira de contornar isso? Existe um link mais recente onde posso obter rsync.exeou de alguma forma, posso fazer com que o Git Bash descompacte esse arquivo .xz?
SherylHohman 23/07

Na verdade, parece ser mais um problema de permissões. Quando eu tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, eu recebo um monte de mensagens informando: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directorye Cannot open: No such file or directorypara vários arquivos / diretórios. Talvez o Git Bash já saiba como descompactar xzarquivos? Mas não pode b / e de permissões? Não consigo usar ou instalar sudo. para Git Bash.
SherylHohman 23/07

Supondo que você baixou o arquivo tar.xz na sua pasta Downloads, você pode descompactá-lo no Git Bash usando:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn

@SherylHohman, você precisa extrair manualmente o exe do arquivo de pacote. Não há "instalação" necessária além de simplesmente soltar o exe na C:\Program Files\Git\usr\binpasta.
nextgentech

7

Eu sei que a pergunta não é "Usando o rsync para MSYS", mas acho que mencionar isso é relevante:

O "MinGW Shell" (anteriormente conhecido como "MSYS (Basic System)") tem de fato o rsync. Estou usando esse shell / sistema o mais rápido possível, pois é muito menor que o Cygwin. (Provavelmente sou o único que se preocupa com o tamanho dos arquivos atualmente.)

O "Git for Windows" / "Git Bash" pode facilmente adicionar o rsync, pois ele é baseado no MinGW / MSYS e foi mencionado na lista de discussão anteriormente.

PS! Se o seu MinGW Shell não possui rsync, basta executar "mingw-get install msys-rsync" para adicioná-lo.

Atualizado em 25 de março de 2016:

O Git para Windows agora usa o MSYS2. E o MSYS2 usa "pacman", não "mingw-get", para instalar pacotes. Infelizmente, "Git for Windows" não inclui pacman ... Há duas opções:

  1. Instale o Git para Windows SDK (que inclui pacman).
  2. Instale o Git dentro do MSYS2.

A última opção é a minha favorita, mas ainda não foi simplificada, portanto a primeira opção é provavelmente mais fácil. Felizmente, será corrigido .

PS! Não brinquei muito com o MSYS2 / pacman, mas parece muito promissor.

Atualizado 7 de agosto de 2019:

Se você estiver usando o Git for Windows (Git Bash), é muito melhor pegar o pacote rsync no repositório do pacote MSYS2, conforme descrito na resposta acima .


infelizmente, em Git Bash:$ mingw-get bash: mingw-get: command not found
Hendy Irawan 24/03

Sim, é um pouco triste. Veja minha resposta atualizada acima - ainda triste, mas a situação melhorou.
hansfn

Eu optei pela segunda opção e acabei com uma pasta de 2,17 GB, mas tudo funciona como um encanto. Eu instalei o rsync usando pacman -S rsync. No passado, usei o CygWin, mas acho que o MSYS2 é incrível, não preciso executar uma interface gráfica para instalar pacotes extras.
Edenshaw

O relatório de bug listado nesta resposta foi fechado como "não corrigível" - no entanto, eu criei uma solicitação pull para incluir o rsync no Git for Windows .
Scott Stevens

Algum link sobre como fazer a opção 1 ou a opção 2? Eu acho que tenho o Git para Windows SDK. Não sei. Mas supondo que sim, ou possa obtê-lo ... e então? Caso contrário, não tenho idéia do que significa instalar o Git no MSYS2. Isso significa que eu preciso excluir minha instalação atual do Git. Perderei qualquer coisa, como configurações ou funcionalidade, se o fizer. Nay links quebram?
SherylHohman 23/07

2

Eu suponho que git bashvocê realmente quis dizer msysgit, também conhecido como "git for windows". A opção Menu Iniciar é git bash, que explica o nome que você usou.

Primeiro, você está correto em descartar o git como uma opção aqui. Uma das coisas que o git não faz bem é lidar com arquivos binários - e você acabaria com um repositório enorme e inchado. Além disso, como você não estará lidando com mudanças, usar a sobrecarga do git me parece um exagero.

Em segundo lugar, parece que a pergunta que você está realmente perguntando é: "Posso usar o rsync do msysgit / Windows?" A resposta curta é, não fora da caixa. msysgité realmente apenas a linha de comando do Windows em termos de forma e função. Dito isto, você tem duas opções: baixar uma ferramenta de terceiros para ativar o rsync em sua máquina Windows ( Stack Overflow: Rsync para Windows ) ou apenas usar o cygwin. Realmente, eles têm o mesmo resultado - então cabe a você decidir quais funcionam melhor.


Posso usar o rsync no meu shell cygwin, mas não no msysgit. Tentei copiar o rsync.exe da pasta bin do cygwin para a pasta bin do msysgit, mas ele ainda não está sendo encontrado. Há algum outro passo que preciso fazer para instalá-lo lá? É estranho que eu esteja recebendo um erro que não consegue encontrar o arquivo, em vez de me dar um erro de que uma das dependências do arquivo está ausente. Obrigado, Will
Will Gant

Isso simplesmente não é possível. O cygwin configura um ambiente baseado em GNU, incluindo bibliotecas, configurações do Linux, etc. msysgité a linha de comando do Windows, que suporta executáveis ​​do Windows. O que provavelmente está acontecendo é que ele nem é capaz de detectar o arquivo como executável. Simplificando, cygwin e msysgit não são nem remotamente compatíveis.
Andrew M.

É possível, mas hacky. Cópia cygiconv-2.dll, cygwin1.dlle rsync.exede Cygwin ao seu caminho msysgit. Nada mais (especialmente o ssh.exe). O problema geralmente é uma incompatibilidade entre o Git SSH e o Cygwin / rsync SSH. Tente manter a mesma versão. Você ainda terá problemas com o, /cygdrive/mas não tenho solução, exceto a cd.
Wernight 18/06/12

0

Pelo que vale a pena, eu estava tendo problemas semelhantes ao fazer com que o cwRsync funcionasse no msysgit quando jogado no caminho da lixeira, mas depois de tentar muitas coisas diferentes, finalmente descobri que simplesmente atualizar para a versão mais recente (2.10.2) do Git para Windows corrigia o questão.


cwRsync custa US $ 19 / ano itefix.net/cwrsync
SherylHohman

0

O rsync é ótimo para sincronização unidirecional. Você pode executar o rsync no cygwin ou, no Windows, também há Deltacopy

Se você deseja ter sincronização bidirecional, dê uma olhada em uníssono

Para uma ferramenta de sincronização de diretório de plataforma cruzada, há syncthing que funciona na maioria das plataformas.


O unison é ótimo, mas você precisa instalá-lo no servidor - como 90% dos servidores estão prontos para o rsync. E OP pediu rsync
pscheit

o OP perguntado sobre rsync, mas o que o OP estava tentando conseguir foi "para ser eficientemente sincronizados entre caixas", e uníssono está disponível na maioria dos repos ...
shouldbeq931

Parece que o DeltaCopy não está disponível para Windows 10. Não pode mais ser mantido?
SherylHohman 23/07

É difícil saber se o Unison funciona no Windows 10. Não há uma atualização há muito tempo. Não há menção de quais versões do sistema operacional Windows são suportadas por este software. Existem várias questões sobre: ​​Windows 10 github.com/bcpierce00/unison/…
SherylHohman

Como uma ferramenta de plataforma cruzada para manter uma estrutura de diretórios em sincronia nos dias de hoje, eu sugiro syncthing syncthing.net No entanto, em 2011 ....
shouldbeq931
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.